70 lines
2.1 KiB
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"
|
|
|