mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-22 14:23:44 -07:00
update
This commit is contained in:
parent
97ba6a42d9
commit
91d89f75c5
3 changed files with 63 additions and 24 deletions
|
@ -1,5 +1,7 @@
|
|||
#include "../../Window.h"
|
||||
#ifdef ENABLE_OPENGL
|
||||
#endif
|
||||
#if 1
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
@ -68,6 +70,35 @@ struct Framebuffer {
|
|||
GLuint fbo, clrbuf, clrbuf_msaa, rbo;
|
||||
};
|
||||
|
||||
struct GLTexture {
|
||||
GLuint gltex;
|
||||
GLfloat size[2];
|
||||
bool filter;
|
||||
};
|
||||
|
||||
void CheckOpenGLError(const char* stmt, const char* fname, int line)
|
||||
{
|
||||
GLenum err = glGetError();
|
||||
if (err != GL_NO_ERROR)
|
||||
{
|
||||
printf("OpenGL error %08x, at %s:%i - for %s\n", err, fname, line, stmt);
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define GL_CHECK(stmt) do { \
|
||||
stmt; \
|
||||
CheckOpenGLError(#stmt, __FILE__, __LINE__); \
|
||||
} while (0)
|
||||
#else
|
||||
#define GL_CHECK(stmt) stmt
|
||||
#endif
|
||||
|
||||
|
||||
static struct GLTexture opengl_tex[2];
|
||||
static GLint opengl_curtex = 0;
|
||||
|
||||
static map<pair<uint64_t, uint32_t>, struct ShaderProgram> shader_program_pool;
|
||||
static GLuint opengl_vbo;
|
||||
static bool current_depth_mask;
|
||||
|
@ -431,22 +462,22 @@ static struct ShaderProgram* gfx_opengl_create_and_load_new_shader(uint64_t shad
|
|||
|
||||
vs_buf[vs_len] = '\0';
|
||||
fs_buf[fs_len] = '\0';
|
||||
/*
|
||||
puts("Vertex shader:");
|
||||
|
||||
/*puts("Vertex shader:");
|
||||
puts(vs_buf);
|
||||
puts("Fragment shader:");
|
||||
puts(fs_buf);
|
||||
puts("End");
|
||||
*/
|
||||
puts("End");*/
|
||||
|
||||
|
||||
const GLchar *sources[2] = { vs_buf, fs_buf };
|
||||
const GLint lengths[2] = { (GLint) vs_len, (GLint) fs_len };
|
||||
GLint success;
|
||||
|
||||
GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER);
|
||||
glShaderSource(vertex_shader, 1, &sources[0], &lengths[0]);
|
||||
glCompileShader(vertex_shader);
|
||||
glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success);
|
||||
GL_CHECK(glShaderSource(vertex_shader, 1, &sources[0], &lengths[0]));
|
||||
GL_CHECK(glCompileShader(vertex_shader));
|
||||
GL_CHECK(glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &success));
|
||||
if (!success) {
|
||||
GLint max_length = 0;
|
||||
glGetShaderiv(vertex_shader, GL_INFO_LOG_LENGTH, &max_length);
|
||||
|
@ -458,12 +489,12 @@ static struct ShaderProgram* gfx_opengl_create_and_load_new_shader(uint64_t shad
|
|||
}
|
||||
|
||||
GLuint fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glShaderSource(fragment_shader, 1, &sources[1], &lengths[1]);
|
||||
glCompileShader(fragment_shader);
|
||||
glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success);
|
||||
GL_CHECK(glShaderSource(fragment_shader, 1, &sources[1], &lengths[1]));
|
||||
GL_CHECK(glCompileShader(fragment_shader));
|
||||
GL_CHECK(glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &success));
|
||||
if (!success) {
|
||||
GLint max_length = 0;
|
||||
glGetShaderiv(fragment_shader, GL_INFO_LOG_LENGTH, &max_length);
|
||||
GL_CHECK(glGetShaderiv(fragment_shader, GL_INFO_LOG_LENGTH, &max_length));
|
||||
char error_log[1024];
|
||||
fprintf(stderr, "Fragment shader compilation failed\n");
|
||||
glGetShaderInfoLog(fragment_shader, max_length, &max_length, &error_log[0]);
|
||||
|
@ -472,9 +503,9 @@ static struct ShaderProgram* gfx_opengl_create_and_load_new_shader(uint64_t shad
|
|||
}
|
||||
|
||||
GLuint shader_program = glCreateProgram();
|
||||
glAttachShader(shader_program, vertex_shader);
|
||||
glAttachShader(shader_program, fragment_shader);
|
||||
glLinkProgram(shader_program);
|
||||
GL_CHECK(glAttachShader(shader_program, vertex_shader));
|
||||
GL_CHECK(glAttachShader(shader_program, fragment_shader));
|
||||
GL_CHECK(glLinkProgram(shader_program));
|
||||
|
||||
size_t cnt = 0;
|
||||
|
||||
|
@ -535,13 +566,13 @@ static struct ShaderProgram* gfx_opengl_create_and_load_new_shader(uint64_t shad
|
|||
GLint sampler_location = glGetUniformLocation(shader_program, "uTex0");
|
||||
GLint uniform_location_0 = glGetUniformLocation(shader_program, "texSize0");
|
||||
glUniform1i(sampler_location, 0);
|
||||
glUniform2f(uniform_location_0, 64.0,32.0);
|
||||
glUniform2f(uniform_location_0, opengl_tex[0].size[0], opengl_tex[0].size[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);
|
||||
glUniform2f(uniform_location_1, 128.0,64.0);
|
||||
GL_CHECK(glUniform1i(sampler_location, 1));
|
||||
GL_CHECK(glUniform2f(uniform_location_1, opengl_tex[1].size[0], opengl_tex[1].size[1]));
|
||||
}
|
||||
|
||||
if (cc_features.opt_alpha && cc_features.opt_noise) {
|
||||
|
@ -567,6 +598,7 @@ static void gfx_opengl_shader_get_info(struct ShaderProgram *prg, uint8_t *num_i
|
|||
}
|
||||
|
||||
static GLuint gfx_opengl_new_texture(void) {
|
||||
|
||||
GLuint ret;
|
||||
glGenTextures(1, &ret);
|
||||
return ret;
|
||||
|
@ -577,10 +609,15 @@ static void gfx_opengl_delete_texture(uint32_t texID) {
|
|||
}
|
||||
|
||||
static void gfx_opengl_select_texture(int tile, GLuint texture_id) {
|
||||
//printf("CURTEX: %d\n", texture_id);
|
||||
opengl_curtex = texture_id;
|
||||
glActiveTexture(GL_TEXTURE0 + tile);
|
||||
glBindTexture(GL_TEXTURE_2D, texture_id);
|
||||
}
|
||||
static void gfx_opengl_upload_texture(const uint8_t *rgba32_buf, uint32_t width, uint32_t height) {
|
||||
//printf("SHIT: texture %d: %d x %d\n", opengl_curtex, width, height);
|
||||
opengl_tex[opengl_curtex].size[0] = width;
|
||||
opengl_tex[opengl_curtex].size[1] = height;
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgba32_buf);
|
||||
}
|
||||
|
||||
|
@ -600,7 +637,7 @@ static uint32_t gfx_cm_to_opengl(uint32_t val) {
|
|||
|
||||
static void gfx_opengl_set_sampler_parameters(int tile, bool linear_filter, uint32_t cms, uint32_t cmt) {
|
||||
const GLint filter = linear_filter && current_filter_mode == LINEAR ? GL_LINEAR : GL_NEAREST;
|
||||
glActiveTexture(GL_TEXTURE0 + tile);
|
||||
GL_CHECK(glActiveTexture(GL_TEXTURE0 + tile));
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gfx_cm_to_opengl(cms));
|
||||
|
@ -646,8 +683,10 @@ static void gfx_opengl_set_use_alpha(bool use_alpha) {
|
|||
|
||||
static void gfx_opengl_draw_triangles(float buf_vbo[], size_t buf_vbo_len, size_t buf_vbo_num_tris) {
|
||||
//printf("flushing %d tris\n", buf_vbo_num_tris);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * buf_vbo_len, buf_vbo, GL_STREAM_DRAW);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3 * buf_vbo_num_tris);
|
||||
GL_CHECK(glBufferData(GL_ARRAY_BUFFER, sizeof(float) * buf_vbo_len, buf_vbo, GL_STREAM_DRAW));
|
||||
//GL_CHECK(glDrawArrays(GL_TRIANGLES, 0, 3 * buf_vbo_num_tris));
|
||||
GL_CHECK(glDrawArrays(GL_POINTS, 0, buf_vbo_num_tris));
|
||||
|
||||
}
|
||||
|
||||
static void gfx_opengl_init(void) {
|
||||
|
|
|
@ -256,14 +256,14 @@ bool ImGui_ImplOpenGL3_Init(const char* glsl_version)
|
|||
|
||||
// Store GLSL version string so we can refer to it later in case we recreate shaders.
|
||||
// Note: GLSL version is NOT the same as GL version. Leave this to NULL if unsure.
|
||||
if (glsl_version == NULL || true)
|
||||
if (glsl_version == NULL)
|
||||
{
|
||||
#if defined(IMGUI_IMPL_OPENGL_ES2)
|
||||
glsl_version = "#version 100";
|
||||
#elif defined(IMGUI_IMPL_OPENGL_ES3)
|
||||
glsl_version = "#version 300 es";
|
||||
#elif defined(__APPLE__)
|
||||
glsl_version = "#version 150";
|
||||
glsl_version = "#version 120";
|
||||
#else
|
||||
glsl_version = "#version 130";
|
||||
#endif
|
||||
|
|
|
@ -154,7 +154,7 @@ namespace SohImGui {
|
|||
switch (impl.backend) {
|
||||
case Backend::SDL:
|
||||
#if __APPLE__
|
||||
ImGui_ImplOpenGL3_Init("#version 120");
|
||||
ImGui_ImplOpenGL3_Init("#version 420");
|
||||
#else
|
||||
ImGui_ImplOpenGL3_Init("#version 120");
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue