我一直在嘗試使用OpenGL 4,第一個障礙實際上是加載GL4,而不是使用MS Windows自帶的令人厭惡的僅軟件GL 1.1。我嘗試了使用GLEW,然後再次更新我的驅動程序,並且GL仍然繼續將版本號設爲1.1.0
。事實證明,這對於GLEW來說並不是問題(它似乎也不需要GLEW),也不是SDL在內部破壞某些東西(我認爲這是我用來創建上下文的東西)。 Andon M. Coleman提出了像素格式的問題,這是我一開始就完全忽略的問題。事實證明,我一直在使用紅色,綠色,藍色和阿爾法每個8位,再加上32位深度。我認爲這是一個很好的64位,其中32個是顏色,32個是距離。但是,由於SDL假定您也需要模板緩衝區(我現在認識到它實際上是需要的),實際上它使像素格式爲72位,這對於加速上下文來說是不允許的,因爲GPU通常最多處理64位。所以,Windows缺乏驅動程序的情況下,Windows提供的古老的GL 1.1支持是默認的,也使其僅用於軟件。OpenGL版本卡在1.1軟件
該代碼中有很多其他的東西,所以我已經把我正在嘗試做的一個基本示例放在一起。它是有效的C++並在MinGW上編譯,假設你正確鏈接它。
#include <gl\gl.h>
#include <SDL2\SDL.h>
#include <stdio.h>
#define SDL_main main
int main()
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,8);
/// What I *was* doing...
/* SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,32); */
// And then I didn't even set SDL_STENCIL_SIZE at all.
// Results in the entire size for each pixel being more than 64.
/// What I *am* doing...
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,8);
// Nice even 32 bits for this and 32 bits for the color is 64.
SDL_Window* window = SDL_CreateWindow(
"Hay GPU y is u no taek pixelz ovar 64 bitz?",
SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
1024,768,
SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL
);
SDL_GLContext context = SDL_GL_CreateContext(window);
printf("GL Version [%s]\n",glGetString(GL_VERSION));
SDL_DestroyWindow(window);
SDL_GL_DeleteContext(context);
SDL_Quit();
return 0;
};
誰一直有一個類似的問題希望其他人可以從我的錯誤中學習,或者至少能夠把它劃掉的可能出現的問題的列表。
也就是說,即使不*** ***接近到什麼是相關的。如果您獲得了OpenGL 1.1上下文,那麼在設置像素格式時使用的參數非常重要(如果選擇硬件不支持的參數,則會得到參考GDI實現),並且從您的問題中缺失。 –
那麼,我應該尋找什麼可能導致這種情況呢? – rsethc
您在創建渲染上下文時告訴SDL使用的參數,正如我在評論中提到的。如果你將這些信息包含在問題中,而不是斷定它是無關緊要的,並將代碼降低到現在的水平,那將會有很大的幫助。 –