In meiner OpenGL-Anwendung unter Ubuntu (12.10) habe ich beim Erstellen eines Fensters folgende GLFW-Fensterhinweise ausgegeben:
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_VISIBLE, GL_TRUE);
glfwWindowHint(GLFW_SAMPLES, 0);
glfwWindowHint(GLFW_RED_BITS, 24);
glfwWindowHint(GLFW_GREEN_BITS, 24);
glfwWindowHint(GLFW_BLUE_BITS, 24);
glfwWindowHint(GLFW_ALPHA_BITS, 8);
// Erstelle OpenGL-Fenster
window = glfwCreateWindow(width, height, windowTitle.c_str(), NULL, NULL);
centerWindow();
glfwMakeContextCurrent(window);
Dies führt jedoch dazu, dass ein OpenGL-Kontext mit einem assoziierten Fenster mit einer Pixel-Farbtiefe von R-G-B-A = 8-8-8-8 erstellt wird. Um dies zu überprüfen, habe ich den folgenden Code verwendet, nachdem ich mein GLFW-Fenster erstellt habe:
int count;
const GLFWvidmode * mode = glfwGetVideoMode(monitor);
cout << "Aktueller Videomodus: " <<
mode->redBits << "-" <<
mode->greenBits << "-" <<
mode->blueBits << endl;
cout << "Alle möglichen Videomodi: " << endl;
mode = glfwGetVideoModes(monitor, &count);
for(int i = 0; i < count; i++) {
cout << mode->redBits << "-" <<
mode->greenBits << "-" <<
mode->blueBits << endl;
}
Zu meiner Überraschung erhalte ich für meinen aktuellen Videomodus und für alle möglichen Videomodi jeweils 8-8-8-8. Ich bin sicher, dass dies nicht der Fall sein kann, da mein Monitor (Samsung S23B550) monochrome Farbverläufe ohne Banding-Probleme anzeigen kann, was bedeutet, dass er mindestens eine Farbtiefe von 16-24 Bit pro Farbkanal haben sollte. Ich verwende auch eine moderne Grafikkarte (Nvidia GT650M), die einen Framebuffer unterstützen sollte, der zwischen 24-32 Bit pro Kanal bietet.
Das einzige seltsame, was zu berücksichtigen ist, ist, dass meine Grafikkarte die Nvidia-Optimus-Technologie verwendet, was bedeutet, dass ich optirun (Bumblee) für die Grafikkartenumschaltung (integriert zu dediziert) verwenden muss, wenn ich meine OpenGL-Anwendungen ausführe.