glClearColor 不起作用

Posted

技术标签:

【中文标题】glClearColor 不起作用【英文标题】:glClearColor doesn't work 【发布时间】:2017-06-28 07:51:12 【问题描述】:

我开始学习 sdl 和 opengl 课程。当我尝试更改背景时,我遇到了一个问题,此功能没有给出任何结果。我使用 MSVS 和 Win8.1。 我正在尝试使用带有参数的各种选项。我总是有黑色背景。有什么想法我会做错什么吗?

#include <SDL.h>
#include <SDL_opengles2.h>
#include <GLES3/gl3.h>
#include <cstdio>
#include <cstdlib>

const unsigned int DISP_WIDTH = 800;
const unsigned int DISP_HEIGHT = 600;

int SDL_main(int argc, char *args[]) 
// ##### FIXME! #####
SDL_Window *window = NULL;
SDL_GLContext context = NULL;

if (SDL_Init(SDL_INIT_VIDEO) < 0) 
    SDL_Log("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
    return 10;


atexit(SDL_Quit);

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_PROFILE_ES);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,0);

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

window = SDL_CreateWindow("Tut", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, DISP_WIDTH, DISP_HEIGHT, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);

if (!window) 
    SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error","Couldn't create the main window",NULL);
    return EXIT_FAILURE;


context = SDL_GL_CreateContext(window);

if (!context) 
    SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error", "Couldn't create an OpenGl context", NULL);
    return EXIT_FAILURE;


glClearColor(0.5F, 0.0F, 1.0F, 0.5F);   // this function changes the color
glClear(GL_COLOR_BUFFER_BIT);

SDL_GL_SwapWindow(window);
bool quit = false;

while (!quit) 
    SDL_Event event;
    if (SDL_WaitEvent(&event) != 0) 
        if (event.type == SDL_QUIT) 
            quit = true;
        
    



return EXIT_SUCCESS;

【问题讨论】:

课程链接:link 作为一般提示,在渲染队列中至少使用一次glGetError() 以查看是否出现问题。 khronos.org/registry/OpenGL-Refpages/gl4/html/glGetError.xhtml 你的程序在窗口初始化之后没有做任何事情。最值得注意的是,它不会刷新其显示,这可能是这里的问题。即使您的程序不会经常更新其显示,您也必须让它在收到SDL_WINDOWEVENT 时刷新显示。或者你打算让它每秒更新几次显示,在这种情况下你不需要在 SDL_WINDOWEVENT 上刷新,但是在你在主循环中实现渲染之前,你什么都看不到。 【参考方案1】:

您不会在循环中的任何时候交换缓冲区。完成所有相关调用后必须交换缓冲区,否则显示将不会更新。

【讨论】:

以上是关于glClearColor 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

glColor 不起作用,出现随机颜色

OpenGL - 深度测试不起作用

transpportrule不起作用

PHP.INI不起作用

C#DataGridView的行列表头背景色字体色不起作用

关于Animate css不起作用的原因