volviewer

Volumetric Data Toy Viewer
git clone anongit@rnpnr.xyz:volviewer.git
Log | Files | Refs | Feed | LICENSE

Commit: d50d8016be03b09434515b89b40e9671ed8fe4a1
Parent: 446c6489d4ac3fa02e24598fb7d0c86ccdd92bf0
Author: Randy Palamar
Date:   Mon, 26 May 2025 06:04:04 -0600

move opengl stuff to header, add #defines needed for w32

Diffstat:
Mcommon.c | 74++------------------------------------------------------------------------
Aopengl.h | 89+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 91 insertions(+), 72 deletions(-)

diff --git a/common.c b/common.c @@ -1,5 +1,5 @@ /* See LICENSE for license details. */ -#include <GL/gl.h> +#include "opengl.h" #include "GLFW/glfw3.h" #include <stdio.h> @@ -61,66 +61,6 @@ global VolumeDisplayItem volumes[] = { #define CYCLE_T_UPDATE_SPEED 0.25f #define BG_CLEAR_COLOUR (v4){{0.12, 0.1, 0.1, 1}} -/* X(name, ret, params) */ - //X(glBlendFunc, void, (GLenum sfactor, GLenum dfactor)) - //X(glDrawArrays, void, (GLenum mode, GLint first, GLsizei count)) - //X(glDrawElements, void, (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices)) - //X(glEnable, void, (GLenum cap)) - //X(glViewport, void, (GLint x, GLint y, GLsizei width, GLsizei height)) -#define OGLProcedureList \ - X(glAttachShader, void, (GLuint program, GLuint shader)) \ - X(glBindFramebuffer, void, (GLenum target, GLuint framebuffer)) \ - X(glBindTextureUnit, void, (GLuint unit, GLuint texture)) \ - X(glBindVertexArray, void, (GLuint array)) \ - X(glBlitNamedFramebuffer, void, (GLuint sfb, GLuint dfb, GLint sx0, GLint sy0, GLint sx1, GLint sy1, GLint dx0, GLint dy0, GLint dx1, GLint dy1, GLbitfield mask, GLenum filter)) \ - X(glClearNamedFramebufferfv, void, (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value)) \ - X(glCompileShader, void, (GLuint shader)) \ - X(glCreateBuffers, void, (GLsizei n, GLuint *buffers)) \ - X(glCreateFramebuffers, void, (GLsizei n, GLuint *ids)) \ - X(glCreateProgram, GLuint, (void)) \ - X(glCreateRenderbuffers, void, (GLsizei n, GLuint *renderbuffers)) \ - X(glCreateShader, GLuint, (GLenum shaderType)) \ - X(glCreateTextures, void, (GLenum target, GLsizei n, GLuint *textures)) \ - X(glCreateVertexArrays, void, (GLsizei n, GLuint *arrays)) \ - X(glDebugMessageCallback, void, (void (*)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *user), void *user)) \ - X(glDeleteProgram, void, (GLuint program)) \ - X(glDeleteShader, void, (GLuint shader)) \ - X(glEnableVertexArrayAttrib, void, (GLuint vao, GLuint index)) \ - X(glGenerateTextureMipmap, void, (GLuint texture)) \ - X(glGetProgramInfoLog, void, (GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog)) \ - X(glGetProgramiv, void, (GLuint program, GLenum pname, GLint *params)) \ - X(glGetShaderInfoLog, void, (GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog)) \ - X(glGetShaderiv, void, (GLuint shader, GLenum pname, GLint *params)) \ - X(glGetTextureImage, void, (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels)) \ - X(glLinkProgram, void, (GLuint program)) \ - X(glNamedBufferData, void, (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage)) \ - X(glNamedBufferStorage, void, (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags)) \ - X(glNamedBufferSubData, void, (GLuint buffer, GLintptr offset, GLsizei size, const void *data)) \ - X(glNamedFramebufferRenderbuffer, void, (GLuint fb, GLenum attachment, GLenum renderbuffertarget, GLuint rb)) \ - X(glNamedFramebufferTexture, void, (GLuint fb, GLenum attachment, GLuint texture, GLint level)) \ - X(glNamedRenderbufferStorageMultisample, void, (GLuint rb, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)) \ - X(glObjectLabel, void, (GLenum identifier, GLuint name, GLsizei length, const char *label)) \ - X(glProgramUniform1f, void, (GLuint program, GLint location, GLfloat v0)) \ - X(glProgramUniform1ui, void, (GLuint program, GLint location, GLuint v0)) \ - X(glProgramUniformMatrix4fv, void, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \ - X(glShaderSource, void, (GLuint shader, GLsizei count, const GLchar **strings, const GLint *lengths)) \ - X(glTextureParameteri, void, (GLuint texture, GLenum pname, GLint param)) \ - X(glTextureStorage2D, void, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)) \ - X(glTextureStorage3D, void, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)) \ - X(glTextureSubImage3D, void, (GLuint texture, GLint level, GLint xoff, GLint yoff, GLint zoff, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pix)) \ - X(glUseProgram, void, (GLuint program)) \ - X(glVertexArrayAttribBinding, void, (GLuint vao, GLuint attribindex, GLuint bindingindex)) \ - X(glVertexArrayAttribFormat, void, (GLuint vao, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)) \ - X(glVertexArrayElementBuffer, void, (GLuint vao, GLuint buffer)) \ - X(glVertexArrayVertexBuffer, void, (GLuint vao, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)) - -#define X(name, ret, params) typedef ret name##_fn params; -OGLProcedureList -#undef X -#define X(name, ret, params) global name##_fn *name; -OGLProcedureList -#undef X - struct gl_debug_ctx { Stream stream; OS *os; @@ -149,16 +89,7 @@ gl_debug_logger(u32 src, u32 type, u32 id, u32 lvl, s32 len, const char *msg, co struct gl_debug_ctx *ctx = (struct gl_debug_ctx *)userctx; Stream *e = &ctx->stream; - stream_append_str8(e, str8("[GL DEBUG ")); - switch (lvl) { - case GL_DEBUG_SEVERITY_HIGH: stream_append_str8(e, str8("HIGH]: ")); break; - case GL_DEBUG_SEVERITY_MEDIUM: stream_append_str8(e, str8("MEDIUM]: ")); break; - case GL_DEBUG_SEVERITY_LOW: stream_append_str8(e, str8("LOW]: ")); break; - case GL_DEBUG_SEVERITY_NOTIFICATION: stream_append_str8(e, str8("NOTIFICATION]: ")); break; - default: stream_append_str8(e, str8("INVALID]: ")); break; - } - stream_append(e, (char *)msg, len); - stream_append_byte(e, '\n'); + stream_append_str8s(e, str8("[OpenGL] "), (str8){.len = len, .data = (u8 *)msg}, str8("\n")); os_write_file(ctx->os->error_handle, stream_to_str8(e)); stream_reset(e, 0); } @@ -405,7 +336,6 @@ init_viewer(ViewerContext *ctx) #define X(name, ret, params) name = (name##_fn *)glfwGetProcAddress(#name); OGLProcedureList #undef X - //if (!gladLoadGL()) os_fatal(str8("failed to load glad\n")); /* NOTE: set up OpenGL debug logging */ struct gl_debug_ctx *gl_debug_ctx = push_struct(&ctx->arena, typeof(*gl_debug_ctx)); diff --git a/opengl.h b/opengl.h @@ -0,0 +1,89 @@ +/* See LICENSE for license details. */ +#if OS_WINDOWS +/* NOTE: msys2 compatibility kludge */ +#define WINGDIAPI +#define APIENTRY +#endif + +#include <GL/gl.h> + +#define GL_DYNAMIC_STORAGE_BIT 0x0100 + +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_TEXTURE_3D 0x806F +#define GL_MULTISAMPLE 0x809D +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_RG 0x8227 +#define GL_RG32F 0x8230 +#define GL_PROGRAM 0x82E2 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_STATIC_DRAW 0x88E4 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 + +typedef char GLchar; +typedef ptrdiff_t GLsizeiptr; +typedef ptrdiff_t GLintptr; + +/* X(name, ret, params) */ +#define OGLProcedureList \ + X(glAttachShader, void, (GLuint program, GLuint shader)) \ + X(glBindFramebuffer, void, (GLenum target, GLuint framebuffer)) \ + X(glBindTextureUnit, void, (GLuint unit, GLuint texture)) \ + X(glBindVertexArray, void, (GLuint array)) \ + X(glBlitNamedFramebuffer, void, (GLuint sfb, GLuint dfb, GLint sx0, GLint sy0, GLint sx1, GLint sy1, GLint dx0, GLint dy0, GLint dx1, GLint dy1, GLbitfield mask, GLenum filter)) \ + X(glClearNamedFramebufferfv, void, (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value)) \ + X(glCompileShader, void, (GLuint shader)) \ + X(glCreateBuffers, void, (GLsizei n, GLuint *buffers)) \ + X(glCreateFramebuffers, void, (GLsizei n, GLuint *ids)) \ + X(glCreateProgram, GLuint, (void)) \ + X(glCreateRenderbuffers, void, (GLsizei n, GLuint *renderbuffers)) \ + X(glCreateShader, GLuint, (GLenum shaderType)) \ + X(glCreateTextures, void, (GLenum target, GLsizei n, GLuint *textures)) \ + X(glCreateVertexArrays, void, (GLsizei n, GLuint *arrays)) \ + X(glDebugMessageCallback, void, (void (*)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, const void *user), void *user)) \ + X(glDeleteProgram, void, (GLuint program)) \ + X(glDeleteShader, void, (GLuint shader)) \ + X(glEnableVertexArrayAttrib, void, (GLuint vao, GLuint index)) \ + X(glGenerateTextureMipmap, void, (GLuint texture)) \ + X(glGetProgramInfoLog, void, (GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog)) \ + X(glGetProgramiv, void, (GLuint program, GLenum pname, GLint *params)) \ + X(glGetShaderInfoLog, void, (GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog)) \ + X(glGetShaderiv, void, (GLuint shader, GLenum pname, GLint *params)) \ + X(glGetTextureImage, void, (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels)) \ + X(glLinkProgram, void, (GLuint program)) \ + X(glNamedBufferData, void, (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage)) \ + X(glNamedBufferStorage, void, (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags)) \ + X(glNamedBufferSubData, void, (GLuint buffer, GLintptr offset, GLsizei size, const void *data)) \ + X(glNamedFramebufferRenderbuffer, void, (GLuint fb, GLenum attachment, GLenum renderbuffertarget, GLuint rb)) \ + X(glNamedFramebufferTexture, void, (GLuint fb, GLenum attachment, GLuint texture, GLint level)) \ + X(glNamedRenderbufferStorageMultisample, void, (GLuint rb, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)) \ + X(glObjectLabel, void, (GLenum identifier, GLuint name, GLsizei length, const char *label)) \ + X(glProgramUniform1f, void, (GLuint program, GLint location, GLfloat v0)) \ + X(glProgramUniform1ui, void, (GLuint program, GLint location, GLuint v0)) \ + X(glProgramUniformMatrix4fv, void, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)) \ + X(glShaderSource, void, (GLuint shader, GLsizei count, const GLchar **strings, const GLint *lengths)) \ + X(glTextureParameteri, void, (GLuint texture, GLenum pname, GLint param)) \ + X(glTextureStorage2D, void, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)) \ + X(glTextureStorage3D, void, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)) \ + X(glTextureSubImage3D, void, (GLuint texture, GLint level, GLint xoff, GLint yoff, GLint zoff, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pix)) \ + X(glUseProgram, void, (GLuint program)) \ + X(glVertexArrayAttribBinding, void, (GLuint vao, GLuint attribindex, GLuint bindingindex)) \ + X(glVertexArrayAttribFormat, void, (GLuint vao, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)) \ + X(glVertexArrayElementBuffer, void, (GLuint vao, GLuint buffer)) \ + X(glVertexArrayVertexBuffer, void, (GLuint vao, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride)) + +#define X(name, ret, params) typedef ret name##_fn params; +OGLProcedureList +#undef X +#define X(name, ret, params) global name##_fn *name; +OGLProcedureList +#undef X +