myou-engine/src/platform/gl.nim

70 lines
2.1 KiB
Nim

when defined(android) or defined(emscripten) or defined(ios):
import glad/gles32_static as gl
export gl
else:
import glad/gl as gl
export gl
proc get_shader_info_log*(shader: GLuint): string =
var logSize: GLint
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, addr logSize)
var s = newString(logSize)
glGetShaderInfoLog(shader, logSize.GLsizei, nil, s.cstring)
return s
proc get_program_info_log*(program: GLuint): string =
var logSize: GLint
glGetProgramiv(program, GL_INFO_LOG_LENGTH, addr logSize)
var s = newString(logSize)
glGetProgramInfoLog(program, logSize.GLsizei, nil, s.cstring)
return s
when compileOption("threads"):
let main_thread_id = getThreadID()
template handleError(x: untyped, t: string) =
when compileOption("threads"):
assert main_thread_id == getThreadID()
try:
x
except:
echo "Error when deleting " & t
echo getCurrentExceptionMsg()
type GPUBuffer* = distinct GLuint
type GPUTexture* = distinct GLuint
type GPUVao* = distinct GLuint
type GPUFramebuffer* = distinct GLuint
type GPURenderbuffer* = distinct GLuint
type GPUProgram* = distinct GLuint
type GPUShader* = distinct GLuint
proc `=destroy`(x: var GPUBuffer) =
if x.GLuint != 0.GLuint:
handleError glDeleteBuffers(1, x.GLuint.addr), "Buffer"
proc `=destroy`(x: var GPUTexture) =
if x.GLuint != 0.GLuint:
handleError glDeleteTextures(1, x.GLuint.addr), "Texture"
proc `=destroy`(x: var GPUVao) =
if x.GLuint != 0.GLuint:
handleError glDeleteVertexArrays(1, x.GLuint.addr), "VertexArray"
proc `=destroy`(x: var GPUFramebuffer) =
if x.GLuint != 0.GLuint:
handleError glDeleteFramebuffers(1, x.GLuint.addr), "Framebuffer"
proc `=destroy`(x: var GPURenderbuffer) =
if x.GLuint != 0.GLuint:
handleError glDeleteRenderbuffers(1, x.GLuint.addr), "Renderbuffer"
proc `=destroy`(x: var GPUProgram) =
if x.GLuint != 0.GLuint:
handleError glDeleteProgram(x.GLuint), "Program"
proc `=destroy`(x: var GPUShader) =
if x.GLuint != 0.GLuint:
handleError glDeleteShader(x.GLuint), "Shader"