【问题标题】:CreateDC() causes glutInit() to fail?CreateDC() 导致 glutInit() 失败?
【发布时间】:2014-09-26 22:12:54
【问题描述】:

我写了一个代码来创建一个窗口并在其中绘制一个形状:

#include<glew.h>
#include<iostream>
#include<GL\freeglut.h>

#include<Windows.h>
#include<stdlib.h>
#include<math.h>

#pragma once

void Render_All()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);
    glColor3f(1, 0, 0); glVertex2f(0.5, 0.5);
    glColor3f(1, 0, 0); glVertex2f(0.5, -0.5);
    glColor3f(1, 0, 0); glVertex2f(-0.5, -0.5);
    glColor3f(1, 0, 0); glVertex2f(-0.5, 0.5);
    glEnd();
    glFlush();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(300, 300);
    glutCreateWindow("Square");
    //glutFullScreen();
    glutDisplayFunc(Render_All);

    GLenum Error = glewInit();

    if(GLEW_OK != Error)
    {
        fprintf(stderr, "GLEW Error");
        return EXIT_FAILURE;
    }

    glutMainLoop();
    return 0;
}

代码编译良好。输出按预期出现。唯一的问题是,我在控制台窗口中收到此消息:

fghInitialize: CreateDC failed, Screen size info may be incorrect. This is quite likely caused by a bad '-display' parameter.

在互联网上嗅探,我发现这是从 freeglut_init.c 文件中调用的。除此之外,我找不到任何解决方法。我该如何解决?

附: :这是在Visual Studio 10中完成的。我在另一台PC(笔记本电脑)上在相同条件下执行了相同的程序,并且没有出现此消息。所以,很可能是硬件问题。不过,它并没有解释如何解决它。

【问题讨论】:

  • 我会考虑不使用单缓冲像素格式。除非您在比 Windows Vista 更新的任何东西上都处于全屏模式,否则它不会工作。
  • 是的,使用双缓冲。 (GLUT_DOUBLE 而不是GLUT_SINGLE 中的glutInitDisplayMode
  • 我确实使用了双缓冲。我将GLUT_SINGLE 更改为GLUT_DOUBLE 并在Render_All() 方法中使用glutSwapBuffers()。我仍然收到消息。还有其他原因吗?请帮忙。

标签: c++ winapi opengl glut freeglut


【解决方案1】:

这是因为您将 -display 参数传递给程序,或者您更可能定义了 DISPLAY 环境变量。 Under windows, FreeGLUT will use the DISPLAY variable 用于调用 CreateDC(),它需要 NULL、“DISPLAY”或有效的显示设备名称。

【讨论】:

猜你喜欢
  • 2021-01-27
  • 2011-12-07
  • 2016-08-19
  • 1970-01-01
  • 2013-12-10
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多