OpenGL窗口创建(使用SDL)

本文介绍使用SDL和OpenGL创建游戏窗口的过程,包括初始化SDL、设置OpenGL上下文、创建窗口和处理基本渲染循环的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

#pragma once
#include "string"
#include "SDL2/SDL.h"
class Display
{
public:
    Display(int width,int height,const std::string& title);
    void Update();
    bool IsClosed();
    void Clear(float r,float g,float b, float a);
    ~Display();
private:
    SDL_Window* m_window;
    SDL_GLContext m_glContext;
    bool m_isClosed;
};
#include "stdafx.h"
#include "Display.h"
#include "GL/glew.h"
#include "iostream"    
using namespace std;
Display::Display(int width, int height, const std::string& title)
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_GL_SetAttribute(SDL_GL_RED_SIZE,8);
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    m_window = SDL_CreateWindow(title.c_str(),SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,width,height,SDL_WINDOW_OPENGL);
    m_glContext = SDL_GL_CreateContext(m_window);
    GLenum status = glewInit();
    if (status!=GLEW_OK)
    {
        cout << "Glew Init Failure" << endl;
    }
    m_isClosed = false;
}
Display::~Display()
{
    SDL_GL_DeleteContext(m_glContext);
    SDL_DestroyWindow(m_window);
    SDL_Quit();
}

void Display::Update()
{
    SDL_GL_SwapWindow(m_window);
    SDL_Event e;
    while (SDL_PollEvent(&e))
    {
        if (e.type==SDL_QUIT)
        {
            m_isClosed = true;
        }
    }
}
bool Display::IsClosed()
{
    return m_isClosed;
}
void Display::Clear(float r, float g, float b, float a)
{
    glClearColor(r,g,b,a);
    glClear(GL_COLOR_BUFFER_BIT);
}
#include "stdafx.h"
#include<iostream>
#include "Gl\glew.h"
#include "Display.h"
using namespace std;
int main(int argc,char** argv)
{
    Display display(800,600,"XiaoKunZhang");
    while (display.IsClosed())
    {
        display.Clear(0.0f, 0.15f, 0.3f, 1.0f);
        display.Update();
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值