- [WIP] Solventant el problema dels shaders

This commit is contained in:
Raimon @ quifisraimon committed 2026-10-07 14:21:26 +02:00
1 parent 9efdbe9933
commit 7aebcfe055
4 files changed
+80 -11

No files matched your search

+30 -9
View File
@@ -30,6 +30,9 @@ namespace backend
SDL_FPoint tex_size = {320, 240};
bool can_use_opengl = false;
bool using_opengl = false;
const char *vShaderSource = nullptr;
const char *fShaderSource = nullptr;
#ifndef __APPLE__
@@ -148,17 +151,26 @@ namespace backend
return programId;
}
void init(const char* vshader, const char* fshader)
void quit()
{
int filesize;
char *vshaderfile = mini::file::getfilebuffer(vshader, filesize, true);
char *fshaderfile = nullptr;
if (fshader) { fshaderfile = mini::file::getfilebuffer(fshader, filesize, true); }
programId = 0;
can_use_opengl = false;
using_opengl = false;
}
void reinit()
{
if (!vShaderSource) return;
SDL_GetWindowSize(video::window, &win_size.x, &win_size.y);
SDL_GetTextureSize(video::tex_shader, &tex_size.x, &tex_size.y);
int filesize;
char *vshaderfile = mini::file::getfilebuffer(vShaderSource, filesize, true);
char *fshaderfile = nullptr;
if (fShaderSource) { fshaderfile = mini::file::getfilebuffer(fShaderSource, filesize, true); }
SDL_PropertiesID props = SDL_GetTextureProperties(video::tex_shader);
int access = SDL_GetNumberProperty(props, SDL_PROP_TEXTURE_ACCESS_NUMBER, -1);
if (access != SDL_TEXTUREACCESS_TARGET) {
@@ -190,7 +202,16 @@ namespace backend
return;
}
can_use_opengl = true;
return;
}
void init(const char* vshader, const char* fshader)
{
vShaderSource = vshader;
fShaderSource = fshader;
programId = 0;
can_use_opengl = false;
using_opengl = false;
reinit();
}
void enable() { if (can_use_opengl) using_opengl = true; }
@@ -216,7 +237,7 @@ namespace backend
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 1);
glViewport(0, 0, win_size.x, win_size.y);
glViewport(backend::video::dest_rect.x, backend::video::dest_rect.y, backend::video::dest_rect.w, backend::video::dest_rect.h);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0.0f, 0.0f);
@@ -234,7 +255,7 @@ namespace backend
if (programId != 0) glUseProgram(oldProgramId);
} else {
SDL_RenderTexture(backend::video::renderer, backend::video::tex_shader, NULL, NULL);
SDL_RenderTexture(backend::video::renderer, backend::video::tex_shader, NULL, &backend::video::dest_rect);
SDL_RenderPresent(backend::video::renderer);
}
if (glGetError()) { printf("GLERROR!\n"); ::exit(1); }