- [WIP] Solventant el problema dels shaders
This commit is contained in:
1 parent
9efdbe9933
commit
7aebcfe055
4 files changed
+80
-11
No files matched your search
@@ -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); }
|
||||
|
||||
Reference in new issue
Block a user