diff --git a/bin/back b/bin/back index b27394c..1b9c70b 100755 Binary files a/bin/back and b/bin/back differ diff --git a/obj/main.o b/obj/main.o index 5e5c872..c3a2821 100644 Binary files a/obj/main.o and b/obj/main.o differ diff --git a/obj/menus.o b/obj/menus.o index c7e7734..941e080 100644 Binary files a/obj/menus.o and b/obj/menus.o differ diff --git a/src/main.c b/src/main.c index 6a6a22b..d9dbb17 100644 --- a/src/main.c +++ b/src/main.c @@ -138,7 +138,7 @@ int main_alt() { // glfw window creation // -------------------- - GLFWwindow* window = glfwCreateWindow(1500, 1000, "LearnOpenGL", NULL, NULL); + GLFWwindow* window = glfwCreateWindow(1500, 1000, "yahoo", NULL, NULL); if (window == NULL) { fprintf(stderr, "ERROR : cannot initialize GL window"); @@ -312,16 +312,16 @@ int main_alt() { glUseProgram(shaderProgramR); glBindVertexArray(RVAO); - gl_drawRect(shaderProgramR, RVAO, RVBO, -0.5f, -0.5f, 0.5f, 0.5f, 255, 43, 255); + finish = clock(); + gl_drawInteger(shaderProgramR, (int)(1.0f/(((float)finish - (float)origin)/CLOCKS_PER_SEC)), -0.5f, 0.85f, 0.05, 32, 255, 32, 0.005, 1); // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.) // ------------------------------------------------------------------------------- - finish = clock(); processInput(window, ((float)finish - (float)origin)/CLOCKS_PER_SEC); teleport_on_edge(); update_entities(((float)finish - (float)origin)/CLOCKS_PER_SEC); updateProj(((float)finish - (float)origin)/CLOCKS_PER_SEC); - printf("%f\n", 1.0f/(((float)finish - (float)origin)/CLOCKS_PER_SEC)); + //printf("%f\n", 1.0f/(((float)finish - (float)origin)/CLOCKS_PER_SEC)); //printf("%lf, %lf, %lf\n", camx, camy, camz); usleep(interval); diff --git a/src/menus.c b/src/menus.c index 6155816..1eeb3d3 100644 --- a/src/menus.c +++ b/src/menus.c @@ -32,19 +32,95 @@ void initMenus() { rectDefault[15] = 0.5f; rectDefault[16] = -0.5f; rectDefault[17] = -1.0f; } -void gl_drawRect(unsigned int fragShader, unsigned int VAO, unsigned int VBO, float x, float y, float w, float h, int r, int g, int b) { +void gl_drawRect(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b) { glm_mat4_identity(scale); glm_mat4_identity(slide); - scale[0][0] = 0.5f; + scale[0][0] = w; + scale[1][1] = h; + scale[2][2] = 0.5f; + + glm_translate(slide, (vec3){x+w/2, y+h/2, 0.0f}); glUniformMatrix4fv(glGetUniformLocation(fragShader, "scale"), 1, GL_FALSE, (float*)scale); glUniformMatrix4fv(glGetUniformLocation(fragShader, "slide"), 1, GL_FALSE, (float*)slide); - glUniform4f(glGetUniformLocation(fragShader, "u_color2"), 0.9f, 0.4f, 0.6f, 0.5f); + glUniform4f(glGetUniformLocation(fragShader, "u_color2"), r/255.0f, g/255.0f, b/255.0f, 0.5f); glDrawArrays(GL_TRIANGLES, 0, 6); } +void gl_drawDigit(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width) { + assert(n >= 0 && n < 10); + if(n == 0) { + gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + } else if(n == 1) { + gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + } else if(n == 2) { + gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b); + } else if(n == 3) { + gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b); + } else if(n == 4) { + gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + } else if(n == 5) { + gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b); + } else if(n == 6) { + gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b); + } else if(n == 7) { + gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + } else if(n == 8) { + gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b); + } else { + gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b); + gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b); + gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b); + } +} + +// 7-segment display +// side can be -1 (aligned right) or 1 (aligned left) +void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width, int side) { + int left = n; + float curx = x; + if(side == 1) { + curx += ((ln_baseN(n, 10)-1)*(size+4*width)); + } + while(left > 0) { + gl_drawDigit(fragShader, left%10, curx, y, size, r, g, b, width); + curx -= (size+4*width); + left = left/10; + } +} + void gl_initDrawRect(unsigned int shaderProgram) { glUseProgram(shaderProgram); } \ No newline at end of file diff --git a/src/menus.h b/src/menus.h index 2830aff..0910798 100644 --- a/src/menus.h +++ b/src/menus.h @@ -3,7 +3,10 @@ void initMenus(); -void gl_drawRect(unsigned int fragShader, unsigned int VAO, unsigned int VBO, float x, float y, float w, float h, int r, int g, int b); +void gl_drawRect(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b); void gl_initDrawRect(unsigned int shaderProgram); +void gl_drawDigit(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width); +void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width, int side); + #endif \ No newline at end of file