X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=erebus2020;a=blobdiff_plain;f=xerebus%2Fsrc%2Fmain.c;h=e7c07283de6f98c08dff8fc53fdc7ac073079274;hp=59a03daa4ad761aec67d568252f558be3e38a91e;hb=d4eaf9f47882dc99d6523b8464dcaa1cc2789f26;hpb=2b43da6b56bd4b56bb3652612b4767a35c631394 diff --git a/xerebus/src/main.c b/xerebus/src/main.c index 59a03da..e7c0728 100644 --- a/xerebus/src/main.c +++ b/xerebus/src/main.c @@ -10,6 +10,7 @@ static void motion(int x, int y); static int win_width, win_height; static float win_aspect; +static int reshape_pending; static struct erb_rend *erb; @@ -17,6 +18,7 @@ static int mouse_x, mouse_y; static int drag_x, drag_y; static int drag; +static unsigned int fbtex; int main(int argc, char **argv) { @@ -36,6 +38,12 @@ int main(int argc, char **argv) } reshape_pending = 1; + glGenTextures(1, &fbtex); + glBindTexture(GL_TEXTURE_2D, fbtex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glEnable(GL_TEXTURE_2D); + glutMainLoop(); erb_destroy(erb); return 0; @@ -46,17 +54,35 @@ static void display(void) if(reshape_pending) { reshape_pending = 0; - erb_allocframe(erb, x, y); + erb_allocframe(erb, win_width, win_height); erb_begin(erb); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, win_width, win_height, 0, - GL_RGB, GL_FLOAT, erb_getframe(erb)); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, win_width, win_height, 0, + GL_RGBA, GL_FLOAT, erb_getframe(erb)); + } else { + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, win_width, win_height, + GL_RGBA, GL_FLOAT, erb_getframe(erb)); } /* TODO: continue with getting notified when a block is done rendering */ + glClear(GL_COLOR_BUFFER_BIT); + glBegin(GL_QUADS); + glColor3f(1, 1, 1); + glTexCoord2f(0, 0); + glVertex2f(0, 0); + glTexCoord2f(1, 0); + glVertex2f(win_width, 0); + glTexCoord2f(1, 1); + glVertex2f(win_width, win_height); + glTexCoord2f(0, 1); + glVertex2f(0, win_height); + glEnd(); + if(drag) { + glPushAttrib(GL_ENABLE_BIT); + glDisable(GL_TEXTURE_2D); glEnable(GL_LOGIC_OP); glLogicOp(GL_XOR); @@ -68,7 +94,7 @@ static void display(void) glVertex2f(drag_x, mouse_y); glEnd(); - glDisable(GL_LOGIC_OP); + glPopAttrib(); } glutSwapBuffers(); @@ -95,6 +121,7 @@ static void keyb(unsigned char key, int x, int y) if(key == 27) { glutExit(); } + glutPostRedisplay(); } static void mouse(int bn, int st, int x, int y) @@ -116,6 +143,8 @@ static void mouse(int bn, int st, int x, int y) rect[1] = y < drag_y ? y : drag_y; rect[2] = abs(x - drag_x); rect[3] = abs(y - drag_y); + + erb_queue_block(erb, rect[0], rect[1], rect[2], rect[3]); printf("rect: %d,%d %dx%d\n", rect[0], rect[1], rect[2], rect[3]); }