iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
0
自我挑戰組

寫遊戲初體驗系列 第 9

Day 9 Using OpenGL in SFML

  • 分享至 

  • xImage
  •  

Using OpenGL in SFML

要在SFML中使用OpenGL,只需要include

#include <SFML/OpenGL.hpp>

但是此動作只是將function include進來,並沒有將他link起來,因此要記得link OpenGL函式庫,否則會有Link error

在建立視窗時可以指定sf::ContextSettings來設定OpenGL參數。

sf::RenderWindow window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(
    24, // depthBits
    8,  // stencilBits
    4,  // antialiasingLevel
    4,  // majorVersion
    4   // minorVersion
));

當我們要呼叫OpenGL function的時候,他們會在目前以激活的context上執行。每個SFML Window 在生成的時候都會有OpenGL Context,我們只需要激活他就可以了

window.setActive(true);

一個簡單的SFML視窗配上OpenGL大概會長這樣

#include <iostream>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

#include <glad/glad.h>
#include <SFML/OpenGL.hpp>

#include <imgui.h>
#include <imgui-SFML.h>

int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(
        24, // depthBits
        8,  // stencilBits
        4,  // antialiasingLevel
        4,  // majorVersion
        4   // minorVersion
    ));
    window.setVerticalSyncEnabled(true);
    // Load OpenGL functions using glad
    if (!gladLoadGL())
    {
        printf("Something went wrong!\n");
        exit(-1);
    }
    ImGui::SFML::Init(window);
    window.setActive(true);

    bool running = true;
    while (running)
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            ImGui::SFML::ProcessEvent(event);
            if (event.type == sf::Event::Closed)
                running = false;
        }
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glClearColor(0.5, 0.5, 0.5, 1);
        
        // draw...
        window.display();
    }

    // release resources...

    return 0;
}

以上的結果如下圖

明天我們會來畫一個三角形。


上一篇
Day 8 [OpenGL] OpenGL intro
下一篇
Day 10 [OpenGL] Hello Traingle
系列文
寫遊戲初體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言