要在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;
}
以上的結果如下圖
明天我們會來畫一個三角形。