1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import
- opengl,
- tri_engine/math/vec
- export
- opengl
- type
- EGL* = object of Exception
- EGL_code* = object of EGL
- code*: EGL_err
- EGL_err {.pure.} = enum
- none = GL_NO_ERROR
- invalidEnum = GL_INVALID_ENUM
- invalidVal = GL_INVALID_VALUE
- invalidOp = GL_INVALID_OPERATION
- stackOverflow = GL_STACK_OVERFLOW
- stackUnderflow = GL_STACK_UNDERFLOW
- outOfMem = GL_OUT_OF_MEMORY
- invalidFramebufferOp = GL_INVALID_FRAMEBUFFER_OPERATION
- unknown
- proc newGL_codeException*(msg: string, code: EGL_err): ref EGL_code =
- result = newException(EGL_code, $code)
- result.code = code
- proc getErr*(): EGL_err =
- result = glGetError().EGL_err
- if result notin {EGL_err.none,
- EGL_err.invalidEnum,
- EGL_err.invalidVal,
- EGL_err.invalidOp,
- EGL_err.invalidFramebufferOp,
- EGL_err.outOfMem,
- EGL_err.stackUnderflow,
- EGL_err.stackOverflow}:
- return EGL_err.unknown
- proc errCheck*() =
- let err = getErr()
- if err != EGL_err.none:
- raise newGL_codeException($err, err)
- macro `?`*(call: expr{nkCall}): expr =
- result = call
- # Can't yet reference foreign symbols in macros.
- #errCheck()
- when defined(doublePrecision):
- const
- glRealType* = cGLdouble
- else:
- const
- glRealType* = cGLfloat
- proc setUniformV4*[T](loc: GLint, vecs: var openarray[TV4[T]]) =
- glUniform4fv(loc, vecs.len.GLsizei, cast[ptr GLfloat](vecs[0].addr))
- proc setUniformV4*[T](loc: GLint, vec: TV4[T]) =
- var vecs = [vec]
- setUniformV4(loc, vecs)
|