nuclear@26: #include nuclear@26: #include "opengl.h" nuclear@25: #include "camera.h" nuclear@25: nuclear@26: static unsigned int tex; nuclear@26: static float tex_matrix[] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; nuclear@26: nuclear@26: #define TESTPAT_WIDTH 256 nuclear@26: #define TESTPAT_HEIGHT 256 nuclear@26: nuclear@25: int cam_init(void *platform_data) nuclear@25: { nuclear@26: unsigned char pal[2][2][3] = { nuclear@26: {{255, 128, 64}, {64, 128, 255}}, nuclear@26: {{128, 255, 64}, {128, 64, 255}} nuclear@26: }; nuclear@26: nuclear@26: int i, j; nuclear@26: unsigned char pixels[TESTPAT_WIDTH * TESTPAT_HEIGHT * 3]; nuclear@26: unsigned char *pptr = pixels; nuclear@26: nuclear@26: for(i=0; i> 3) & 1) == ((j >> 3) & 1); nuclear@26: float x = 2.0 * (float)j / (float)TESTPAT_WIDTH - 1.0; nuclear@26: float y = 2.0 * (float)i / (float)TESTPAT_HEIGHT - 1.0; nuclear@26: float len = sqrt(x * x + y * y); nuclear@26: float wave = cos(len * 4.0 * M_PI); nuclear@26: int band = wave >= 0 ? 0 : 1; nuclear@26: nuclear@26: *pptr++ = pal[band][chess][0]; nuclear@26: *pptr++ = pal[band][chess][1]; nuclear@26: *pptr++ = pal[band][chess][2]; nuclear@26: } nuclear@26: } nuclear@26: nuclear@26: glGenTextures(1, &tex); nuclear@26: glBindTexture(GL_TEXTURE_2D, tex); nuclear@26: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); nuclear@26: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); nuclear@26: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TESTPAT_WIDTH, TESTPAT_HEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels); nuclear@26: nuclear@26: return 0; nuclear@26: } nuclear@26: nuclear@26: void cam_shutdown(void) nuclear@26: { nuclear@26: glDeleteTextures(1, &tex); nuclear@26: } nuclear@26: nuclear@26: unsigned int cam_texture(void) nuclear@26: { nuclear@26: return tex; nuclear@26: } nuclear@26: nuclear@26: const float *cam_texture_matrix(void) nuclear@26: { nuclear@26: return tex_matrix; nuclear@26: } nuclear@26: nuclear@26: int cam_start_video(void) nuclear@26: { nuclear@26: return 0; nuclear@26: } nuclear@26: nuclear@26: int cam_stop_video(void) nuclear@26: { nuclear@26: return 0; nuclear@26: } nuclear@26: nuclear@26: int cam_update(void) nuclear@26: { nuclear@26: return 0; nuclear@26: } nuclear@26: nuclear@26: int cam_is_capturing(void) nuclear@26: { nuclear@26: return 1; nuclear@26: } nuclear@26: nuclear@26: int cam_video_size(int *xsz, int *ysz) nuclear@26: { nuclear@26: *xsz = TESTPAT_WIDTH; nuclear@26: *ysz = TESTPAT_HEIGHT; nuclear@26: return 0; nuclear@26: } nuclear@26: nuclear@26: int cam_take_picture(void) nuclear@26: { nuclear@25: return -1; nuclear@25: } nuclear@25: nuclear@26: void cam_draw_preview(void) nuclear@25: { nuclear@26: glPushAttrib(GL_ENABLE_BIT); nuclear@26: glDisable(GL_DEPTH_TEST); nuclear@26: glDisable(GL_LIGHTING); nuclear@26: glEnable(GL_TEXTURE_2D); nuclear@26: glDisable(GL_BLEND); nuclear@26: nuclear@26: glUseProgram(0); nuclear@26: nuclear@26: glBindTexture(GL_TEXTURE_2D, tex); nuclear@26: nuclear@26: glBegin(GL_QUADS); nuclear@26: glTexCoord2f(0, 0); nuclear@26: glVertex2f(-1, -1); nuclear@26: glTexCoord2f(1, 0); nuclear@26: glVertex2f(1, -1); nuclear@26: glTexCoord2f(1, 1); nuclear@26: glVertex2f(1, 1); nuclear@26: glTexCoord2f(0, 1); nuclear@26: glVertex2f(-1, 1); nuclear@26: glEnd(); nuclear@26: nuclear@26: glPopAttrib(); nuclear@25: }