Estoy tratando de mostrar una ventana openGL en pantalla completa y estoy usando la NeHe tutoriales para aprender cómo hacer esto. sin embargo he llegado a un punto donde yo estoy usando el mismo código, en tanto el código de ejemplo dado y mi propio código, pero cuando se llega a esta línea:

if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)

esto no se evalúe a true en mi código, aunque no en el código de ejemplo dado. esto es aún más confuso, pues mientras que de-molestando todo era exactamente la misma hasta este punto.

Hay algo simple que me falta como algo en las propiedades del proyecto, o si no, podría alguien aconsejarme sobre cualquier otras formas de creación de una pantalla completa de la ventana.

NeHe tutorial estoy usando:
http://nehe.gamedev.net/tutorial/creating_an_opengl_window_%28win32%29/13001/

  • El monitor/tarjeta gráfica probablemente no sea compatible con la configuración que se ajuste en dmScreenSettings
  • resulta incluso si la resolución no es exactamente lo mismo, mi pc no le gusta
  • Has probado a compilar y ejecutar, sin cambios, el código de ejemplo de NeHe?
InformationsquelleAutor Matt | 2013-04-09

2 Comentarios

  1. 7

    Si apenas estamos aprendiendo, usted podría tratar de usar GLUT. Usted puede crear una ventana en un par de líneas, y sólo puede meterse con su OpenGL código, hasta que se sienta cómodo con él lo suficiente como para realmente probar la plataforma de APIs específicas para hacerlo, como WinAPI.

    Necesitará instalar Freeglut (aplicación de la obsoleta GLUT), y GLEW (por la facilidad de uso de OpenGL 1.1+ funciones debido a que Microsoft gl.h no ha sido actualizada desde entonces)

    Mínimo código:

    #define FREEGLUT_STATIC //defined so you can link to freeglut_static.lib when compiling
    #define GLEW_STATIC     //defined so you can link to glew's static .lib when compiling
    
    #include <GL/glew.h>     //has to be included before gl.h, or any header that includes gl.h
    #include <GL/freeglut.h>
    
    void draw()
    {
        //code for rendering here
        glutSwapBuffers();   //swapping image buffer for double buffering
        glutPostRedisplay(); //redrawing. Omit this line if you don't want constant redraw
    }
    
    int main(int argc, char** argv)
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); //enabling double buffering and RGBA
        glutInitWindowSize(600, 600);
        glutCreateWindow("OpenGL"); //creating the window
        glutFullScreen();           //making the window full screen
        glutDisplayFunc(draw);      //draw is your function for redrawing the screen
    
        glutMainLoop();
    
        return 0;
    }
    • Se puede evitar dando el tamaño de la pantalla (600, 600) y, sin embargo, obtener una pantalla completa?
    • No puede herir a tratar
  2. 3

    Windows tiende a ser muy exigente en lo que pone en estructuras como DEVMODE. Echa un vistazo a DEVMODE, esta estructura es enorme y tiene un montón de entradas completamente irrelevante para los monitores, por ejemplo de papel dimensiones (resulta que la misma estructura puede ser usado para impresoras así).

    Ahora si se construye una estructura DEVMODE sí mismo, las probabilidades son, usted está construyendo algo que Windows no se como. Esto también va para un montón de otras estructuras de este tipo, por ejemplo, configuración del puerto serie es bastante exigente.

    Aquí es lo que me sugieren y hacer en mi propio código: recuperar Primero de Windows una estructura de trabajo, a continuación, modificar y pasar de nuevo. En caso de que exista una función de enumeración, la primera mirada, de Windows ya sabe un modo parecido a lo que usted desea. En el caso de Ajustes de la Pantalla a debe utilice uno de los modos enumerados como cualquier modo diferente será rechazado por las versiones posteriores de Windows de modo de no dejar al usuario con una pantalla en blanco, si el monitor no se sincronizarán con la nueva configuración.

    A enumerar utilizar la función EnumDisplaySettings. A continuación, busque una opción que más se acerque a sus necesidades; o mejor, mostrar al usuario la lista de los modos disponibles y dejar que él eligió a partir de ahí. A continuación, utilice la estructura entregados por Windows para establecer el modo de visualización por ChangeDisplaySettings

Dejar respuesta

Please enter your comment!
Please enter your name here