2014-12-18 6 views
0

Emscripten을 사용하여 브라우저에서 실행되는 오픈 소스 게임을 얻으려고합니다. 그것은 잘 컴파일의 모든 파일을 어떤 모두를로드,하지만 난 그것을 실행할 때 다음과 같은 예외가 얻을 : SDL_FillRect (간단한 클리어 기능) 다음을 호출Emscripten - surfData.colors32가 정의되지 않았습니다. SDL_FillRect

exception thrown: TypeError: surfData.colors32 is undefined,[email protected]:///home/misson20000/dev/js/game.js:9702:9 
[email protected]:///home/misson20000/dev/js/game.js:112026:3 
... 
[email protected]:///home/misson20000/dev/js/game.js:10525:11 
[email protected]:///home/misson20000/dev/js/game.js:170793:10 
[email protected]:///home/misson20000/dev/js/game.js:173065:15 
[email protected]:///home/misson20000/dev/js/game.js:173122:7 
run/<@file:///home/misson20000/dev/js/game.js:173134:7 

코드를 :

SDL_FillRect(fSurface, NULL, MapColor(r, g, b)); 

MapColor은 조금 문제가되는 표면은 스크린 표면 인 것을 알 소스 코드에 헤매지

return SDL_MapRGB(fSurface->format, r, g, b); 

로 정의된다.

surfData.colors32를 으로 만들려면 어떻게해야합니까?은 정의되지 않았습니까?

답변

0

colors32는 SDL_HWPALETTE 플래그로 SDL 표면을 만들 때 사용됩니다. 이 유형의 표면을 올바르게 사용하려면 SDL_FillRect 앞에 SDL_SetColors를 호출해야합니다. src/library_sdl.js에서 살펴보세요.

SDL_SetColors: function(surf, colors, firstColor, nColors) { 
    var surfData = SDL.surfaces[surf]; 

    // we should create colors array 
    // only once cause client code 
    // often wants to change portion 
    // of palette not all palette. 
    if (!surfData.colors) { 
    var buffer = new ArrayBuffer(256 * 4); // RGBA, A is unused, but faster this way 
    surfData.colors = new Uint8Array(buffer); 
    surfData.colors32 = new Uint32Array(buffer); 
    } 
    //... 
}