mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-23 06:35:33 -07:00
three point filter fix (#2)
This commit is contained in:
parent
c17e3da59b
commit
d5333190b3
1 changed files with 34 additions and 16 deletions
|
@ -68,14 +68,15 @@ struct Framebuffer {
|
||||||
GLuint fbo, clrbuf, clrbuf_msaa, rbo;
|
GLuint fbo, clrbuf, clrbuf_msaa, rbo;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
struct GLTexture {
|
struct GLTexture {
|
||||||
GLuint gltex;
|
uint16_t width;
|
||||||
GLfloat size[2];
|
uint16_t height;
|
||||||
bool filter;
|
} textures[1024];
|
||||||
};
|
|
||||||
|
|
||||||
static std::map<int, GLTexture> opengl_tex;
|
static GLuint current_texture_ids[2];
|
||||||
static GLint opengl_curtex = 0;
|
static uint8_t current_tile;
|
||||||
|
#endif
|
||||||
|
|
||||||
static map<pair<uint64_t, uint32_t>, struct ShaderProgram> shader_program_pool;
|
static map<pair<uint64_t, uint32_t>, struct ShaderProgram> shader_program_pool;
|
||||||
static GLuint opengl_vbo;
|
static GLuint opengl_vbo;
|
||||||
|
@ -536,20 +537,25 @@ static struct ShaderProgram* gfx_opengl_create_and_load_new_shader(uint64_t shad
|
||||||
|
|
||||||
gfx_opengl_load_shader(prg);
|
gfx_opengl_load_shader(prg);
|
||||||
|
|
||||||
int ctex = opengl_curtex;
|
|
||||||
if (cc_features.used_textures[0]) {
|
if (cc_features.used_textures[0]) {
|
||||||
GLint sampler_location = glGetUniformLocation(shader_program, "uTex0");
|
GLint sampler_location = glGetUniformLocation(shader_program, "uTex0");
|
||||||
GLint uniform_location_0 = glGetUniformLocation(shader_program, "texSize0");
|
|
||||||
glUniform1i(sampler_location, 0);
|
glUniform1i(sampler_location, 0);
|
||||||
|
|
||||||
int mtex = cc_features.used_textures[1] ? ctex - 1 : ctex;
|
#if __APPLE__
|
||||||
glUniform2f(uniform_location_0, opengl_tex[mtex].size[0], opengl_tex[mtex].size[1]);
|
GLint uniform_location_0 = glGetUniformLocation(shader_program, "texSize0");
|
||||||
|
GLTexture currentTexture = textures[current_texture_ids[current_tile]];
|
||||||
|
glUniform2f(uniform_location_0, currentTexture.width, currentTexture.height);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (cc_features.used_textures[1]) {
|
if (cc_features.used_textures[1]) {
|
||||||
GLint sampler_location = glGetUniformLocation(shader_program, "uTex1");
|
GLint sampler_location = glGetUniformLocation(shader_program, "uTex1");
|
||||||
GLint uniform_location_1 = glGetUniformLocation(shader_program, "texSize1");
|
|
||||||
glUniform1i(sampler_location, 1);
|
glUniform1i(sampler_location, 1);
|
||||||
glUniform2f(uniform_location_1, opengl_tex[ctex].size[0], opengl_tex[ctex].size[1]);
|
|
||||||
|
#if __APPLE__
|
||||||
|
GLint uniform_location_1 = glGetUniformLocation(shader_program, "texSize1");
|
||||||
|
GLTexture currentTexture = textures[current_texture_ids[current_tile]];
|
||||||
|
glUniform2f(uniform_location_1, currentTexture.width, currentTexture.height);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cc_features.opt_alpha && cc_features.opt_noise) {
|
if (cc_features.opt_alpha && cc_features.opt_noise) {
|
||||||
|
@ -585,15 +591,27 @@ static void gfx_opengl_delete_texture(uint32_t texID) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gfx_opengl_select_texture(int tile, GLuint texture_id) {
|
static void gfx_opengl_select_texture(int tile, GLuint texture_id) {
|
||||||
//printf("CURTEX: %d\n", texture_id);
|
//printf("select texture: %d - %d\n", tile, texture_id);
|
||||||
opengl_curtex = texture_id;
|
|
||||||
glActiveTexture(GL_TEXTURE0 + tile);
|
glActiveTexture(GL_TEXTURE0 + tile);
|
||||||
glBindTexture(GL_TEXTURE_2D, texture_id);
|
glBindTexture(GL_TEXTURE_2D, texture_id);
|
||||||
|
|
||||||
|
#if __APPLE__
|
||||||
|
current_texture_ids[tile] = texture_id;
|
||||||
|
current_tile = tile;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
static void gfx_opengl_upload_texture(const uint8_t *rgba32_buf, uint32_t width, uint32_t height) {
|
static void gfx_opengl_upload_texture(const uint8_t *rgba32_buf, uint32_t width, uint32_t height) {
|
||||||
opengl_tex[opengl_curtex].size[0] = width;
|
//printf("upload texture: %d - size: %d, %d\n", current_tile, width, height);
|
||||||
opengl_tex[opengl_curtex].size[1] = height;
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba32_buf);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba32_buf);
|
||||||
|
|
||||||
|
#if __APPLE__
|
||||||
|
float wdpi_scale = 0;
|
||||||
|
float hdpi_scale = 0;
|
||||||
|
SDL_GetDisplayDPI(0, NULL, &hdpi_scale, &wdpi_scale);
|
||||||
|
//printf("dpi_scale: %f\n", dpi_scale);
|
||||||
|
textures[current_texture_ids[current_tile]].width = width * (wdpi_scale / 32.0);
|
||||||
|
textures[current_texture_ids[current_tile]].height = height * (hdpi_scale / 32.0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t gfx_cm_to_opengl(uint32_t val) {
|
static uint32_t gfx_cm_to_opengl(uint32_t val) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue