![](/img/trans.png)
[英]Is it possible to run C++ binded with SDL+OpenGL code on a web browser?
[英]SDL+OpenGL program not appearing on linux
我開始在Windows上使用SDL和OpenGL制作這個超級簡單的游戲引擎。 引擎位於靜態庫中,到目前為止,它只顯示一個藍色窗口,所有地面都適用於引擎。
它在Windows上運行良好,但后來我把它移植到Linux而沒有任何東西。 程序運行正常,顯示在系統監視器中,但沒有窗口出現。 我安裝了幾個台面和gl庫,以檢查是不是它。 現在它不會運行,並說進程以狀態-1終止。
這是引擎中的初始化代碼。 請問別的什么。
#include "Scales.h"
#include "SDL/SDL.h"
#include "gl.h"
#include "glu.h"
Engine *scalesEngine;
bool OnInit(int WindowHeight, int WindowWidth){
SDL_Surface* Surf_Display;
if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
return false;
}
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);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2);
if((Surf_Display = SDL_SetVideoMode(WindowWidth, WindowHeight, 32, SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER | SDL_OPENGL)) = NULL){
return false;
}
glClearColor(0.422f,0.576f,1.0f,1.0f);
glClearDepth(1.0f);
glViewport(0, 0, WindowWidth, WindowHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, WindowWidth, WindowHeight, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glLoadIdentity();
game_Init();
return true;
}
int main(int argc, char* argv[]){
scalesEngine = new Engine;
game_preload();
if(OnInit(scalesEngine->WindowHeight(), scalesEngine->WindowWidth()) == false){
return -1;
}
SDL_Event Event;
//Main Game Loop
while(scalesEngine->Running){
while(SDL_PollEvent(&Event)){
scalesEngine->OnEvent(&Event);
}
scalesEngine->Update();
scalesEngine->Render();
}
scalesEngine->OnCleanUp();
delete scalesEngine;
return 0;
}
if((Surf_Display = SDL_SetVideoMode(WindowWidth, WindowHeight, 32, SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER | SDL_OPENGL)) = NULL){
return false;
}
我很確定你的意思是== NULL
,對嗎?
如果你沒有窗口,我會懷疑你沒有得到你的硬件上下文。 嘗試使用SDL_SWSURFACE
而不是SDL_HWSURFACE
。
SDL_SetVideoMode(... SDL_SWSURFACE ...
我在VM中進行開發時已經看到過這種情況,但我確信還有其他原因。
編輯:
正如評論中所指出的,無論如何,這兩個表面標志可能與SDL_OPENGL
一起是多余的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.