Rendering on PSP again.
This commit is contained in:
@@ -51,6 +51,7 @@ errorret_t displayInit(void) {
|
||||
glShadeModel(GL_SMOOTH); // Fixes color on PSP?
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
|
||||
glEnableClientState(GL_COLOR_ARRAY);// To confirm: every frame on PSP?
|
||||
@@ -82,7 +83,12 @@ errorret_t displayUpdate(void) {
|
||||
|
||||
// TODO: move to framebuffer component
|
||||
int32_t windowWidth, windowHeight;
|
||||
SDL_GetWindowSize(DISPLAY.window, &windowWidth, &windowHeight);
|
||||
#if PSP
|
||||
windowWidth = DISPLAY_WINDOW_WIDTH_DEFAULT;
|
||||
windowHeight = DISPLAY_WINDOW_HEIGHT_DEFAULT;
|
||||
#else
|
||||
SDL_GetWindowSize(DISPLAY.window, &windowWidth, &windowHeight);
|
||||
#endif
|
||||
glViewport(0, 0, windowWidth, windowHeight);
|
||||
#endif
|
||||
|
||||
|
@@ -10,6 +10,7 @@
|
||||
|
||||
#if DISPLAY_SDL2
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glext.h>
|
||||
|
@@ -122,7 +122,11 @@ void frameBufferDispose(framebuffer_t *framebuffer) {
|
||||
assertUnreachable("Cannot dispose of backbuffer");
|
||||
}
|
||||
|
||||
glDeleteFramebuffersEXT(1, &framebuffer->id);
|
||||
#if DISPLAY_SIZE_DYNAMIC == 0
|
||||
assertUnreachable("Dynamic size framebuffers not supported");
|
||||
#else
|
||||
glDeleteFramebuffersEXT(1, &framebuffer->id);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -43,7 +43,7 @@ void sceneOverworldRender(void) {
|
||||
spriteBatchPush(
|
||||
&testAsset->paletteImage.texture,
|
||||
0.0f, 0.0f, 12.0f, 12.0f,
|
||||
0xFF, 0x00, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0.0f, 0.0f, 1.0f, 1.0f
|
||||
);
|
||||
spriteBatchFlush();
|
||||
|
@@ -66,6 +66,7 @@ void textureInit(
|
||||
"Palette index out of range"
|
||||
);
|
||||
|
||||
// Get and validate the palette.
|
||||
const palette_t *pal = PALETTE_LIST[data.palette.palette];
|
||||
assertNotNull(pal, "Palette cannot be NULL");
|
||||
GLenum err = glGetError();
|
||||
@@ -75,18 +76,23 @@ void textureInit(
|
||||
|
||||
// Do we support paletted textures?
|
||||
bool_t havePalTex = false;
|
||||
GLint mask = 0;
|
||||
glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &mask);
|
||||
if(mask & GL_CONTEXT_CORE_PROFILE_BIT) {
|
||||
GLint n=0; glGetIntegerv(GL_NUM_EXTENSIONS, &n);
|
||||
for (GLint i=0; i<n; ++i) {
|
||||
const char* e = (const char*)glGetStringi(GL_EXTENSIONS, i);
|
||||
if (e && strcmp(e, "GL_EXT_paletted_texture")==0) { havePalTex = true; break; }
|
||||
|
||||
#if PSP
|
||||
havePalTex = true;
|
||||
#else
|
||||
GLint mask = 0;
|
||||
glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &mask);
|
||||
if(mask & GL_CONTEXT_CORE_PROFILE_BIT) {
|
||||
GLint n=0; glGetIntegerv(GL_NUM_EXTENSIONS, &n);
|
||||
for (GLint i=0; i<n; ++i) {
|
||||
const char* e = (const char*)glGetStringi(GL_EXTENSIONS, i);
|
||||
if (e && strcmp(e, "GL_EXT_paletted_texture")==0) { havePalTex = true; break; }
|
||||
}
|
||||
} else {
|
||||
const char* ext = (const char*)glGetString(GL_EXTENSIONS);
|
||||
havePalTex = ext && strstr(ext, "GL_EXT_paletted_texture");
|
||||
}
|
||||
} else {
|
||||
const char* ext = (const char*)glGetString(GL_EXTENSIONS);
|
||||
havePalTex = ext && strstr(ext, "GL_EXT_paletted_texture");
|
||||
}
|
||||
#endif
|
||||
|
||||
if(!havePalTex) {
|
||||
// Not supported, convert to RGBA using lookup
|
||||
@@ -105,10 +111,14 @@ void textureInit(
|
||||
);
|
||||
} else {
|
||||
// Supported.
|
||||
glColorTableEXT(
|
||||
GL_TEXTURE_2D, GL_RGBA, pal->colorCount, GL_RGBA,
|
||||
GL_UNSIGNED_BYTE, (const void*)pal->colors
|
||||
);
|
||||
#if PSP
|
||||
// PSP requires the color table itself to be a power of two
|
||||
assertTrue(
|
||||
pal->colorCount == mathNextPowTwo(pal->colorCount),
|
||||
"Palette color count must be a power of 2 for PSP"
|
||||
);
|
||||
#endif
|
||||
|
||||
glTexImage2D(
|
||||
GL_TEXTURE_2D,
|
||||
0, GL_COLOR_INDEX8_EXT,
|
||||
@@ -116,6 +126,11 @@ void textureInit(
|
||||
0, GL_COLOR_INDEX8_EXT,
|
||||
GL_UNSIGNED_BYTE, (void*)data.palette.data
|
||||
);
|
||||
|
||||
glColorTableEXT(
|
||||
GL_TEXTURE_2D, GL_RGBA, pal->colorCount, GL_RGBA,
|
||||
GL_UNSIGNED_BYTE, (const void*)pal->colors
|
||||
);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -129,8 +144,6 @@ void textureInit(
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user