nanogui c++ opengl types cross-platform

c++ - nanogui - glfw



¿Tengo que usar los tipos de datos OpenGL(GLint, CLchar,...) para un juego multiplataforma? (2)

Por ejemplo, el equivalente de OpenGL a unsigned int es GLuint

No, no lo es, y esa es exactamente la razón por la que debe usar los tipos de datos de OpenGL cuando interactúa con OpenGL.

GLuint no es "equivalente" a unsigned int . GLuint debe tener 32 bits de tamaño. Siempre tiene un tamaño de 32 bits. unsigned int puede tener un tamaño de 32 bits. Puede ser de 64 bits. No lo sabes, y C no te lo dirá (aparte de sizeof ).

Estos tipos de datos se definirán para cada plataforma, y ​​se pueden definir de manera diferente para diferentes plataformas. Los usa porque, incluso si se definen de manera diferente, siempre aparecerán en los mismos tamaños. Los tamaños que las API de OpenGL esperan y requieren.

Tengo una breve pregunta. ¿Por qué OpenGL viene con sus propios tipos de datos para tipos estándar como int, unsigned int, char, etc.? ¿Y tengo que usarlos en lugar de la compilación en los tipos de datos C ++?

Por ejemplo, el equivalente de OpenGL a unsigned int es GLuint y para ac string hay GLchar* lugar de char* .


No soy un experto en OpenGL , pero generalmente frameworks / plataformas como OpenGL , Qt , etc. definen sus propios tipos de datos para que el significado y la capacidad del tipo de datos subyacente permanezca igual en diferentes sistemas operativos. Usualmente este comportamiento se obtiene usando macros de preprocesador C / C ++, pero para lo que concierne a GLuint , parece ser solo un typedef en gl.h :

typedef unsigned int GLuint;

Entonces la respuesta es sí. Debe utilizar los tipos de datos del marco para garantizar una buena portabilidad de su código dentro de ese marco en todos los sistemas operativos.