#include "nexus3d_impl.h"
#include "gfx_gl.h"
+static unsigned int cur_state;
+
void nex_clear(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glViewport(x, y, w, h);
}
+static unsigned int glstateopt(enum nex_state_opt opt)
+{
+ switch(opt) {
+ case NEX_DEPTH_TEST:
+ return GL_DEPTH_TEST;
+ case NEX_STENCIL_TEST:
+ return GL_STENCIL_TEST;
+ case NEX_BLEND:
+ return GL_BLEND;
+ case NEX_CULL_FACE:
+ return GL_CULL_FACE;
+ default:
+ break;
+ }
+ return 0;
+}
+
+void nex_enable(enum nex_state_opt opt)
+{
+ unsigned int glst = glstateopt(opt);
+ if(glst > 0) {
+ glEnable(glst);
+ cur_state |= (1 << opt);
+ }
+}
+
+void nex_disable(enum nex_state_opt opt)
+{
+ unsigned int glst = glstateopt(opt);
+ if(glst > 0) {
+ glDisable(glst);
+ cur_state &= ~(1 << opt);
+ }
+}
+
+int nex_is_enabled(enum nex_state_opt opt)
+{
+ return cur_state & (1 << opt) ? 1 : 0;
+}
+
nex_buffer *nex_alloc_buffer(size_t sz, const void *data)
{
nex_buffer *buf;
return status ? 0 : -1;
}
+void nex_bind_sdrprog(nex_sdrprog *prog)
+{
+ glUseProgram(prog->prog);
+}
+
+int nex_find_uniform(nex_sdrprog *prog, const char *name)
+{
+ return glGetUniformLocation(prog->prog, name);
+}
+
+void nex_uniform_mat4(nex_sdrprog *prog, int loc, const float *mat)
+{
+ if(loc < 0) return;
+ glProgramUniformMatrix4fv(prog->prog, loc, 1, 0, mat);
+}
+
+void nex_uniform_mat4_name(nex_sdrprog *prog, const char *name, const float *mat)
+{
+ int loc = glGetUniformLocation(prog->prog, name);
+ if(loc >= 0) {
+ glProgramUniformMatrix4fv(prog->prog, loc, 1, 0, mat);
+ }
+}
+
#define SPIRV_MAGIC 0x07230203
#define SPIRV_CIGAM 0x03022307
struct spirv_header {
}
return 0;
}
-
-void nex_bind_sdrprog(nex_sdrprog *prog)
-{
- glUseProgram(prog->prog);
-}