X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=test.cpp;fp=test.cpp;h=974fe53998c5ad5198919cd26acd67fdba8b58da;hp=6de5452a7270601cf12d1c5d8f3390da6cdf2057;hb=0ba76f4df40e2f9847fbecfca631a34c20bf07f4;hpb=d08c44d915b1149c9de699e66a0466388223603f diff --git a/test.cpp b/test.cpp index 6de5452..974fe53 100644 --- a/test.cpp +++ b/test.cpp @@ -5,8 +5,6 @@ #define HEIGHT 720 #define BUFFER_OFFSET(i) ((char *)NULL + (i)) -#define HSV_WHEEL_SIZE 128 - #include #include @@ -21,12 +19,8 @@ #include #include "util.h" - -#ifdef NDEBUG -#define check_error() -#else -#define check_error() { int err = glGetError(); if (err != GL_NO_ERROR) { printf("GL error 0x%x at line %d\n", err, __LINE__); exit(1); } } -#endif +#include "widgets.h" +#include "texture_enum.h" unsigned char result[WIDTH * HEIGHT * 4]; @@ -87,13 +81,6 @@ private: std::vector effects; }; -enum textures { - SOURCE_IMAGE = 1, - SRGB_LUT = 2, - SRGB_REVERSE_LUT = 3, - HSV_WHEEL = 4, -}; - GLhandleARB read_shader(const char* filename, GLenum type) { static char buf[131072]; @@ -192,137 +179,6 @@ void draw_picture_quad(GLint prog, int frame) check_error(); } -void draw_hsv_wheel(float y, float rad, float theta, float value) -{ - glUseProgramObjectARB(0); - check_error(); - glActiveTexture(GL_TEXTURE0); - check_error(); - glEnable(GL_TEXTURE_2D); - check_error(); - glBindTexture(GL_TEXTURE_2D, HSV_WHEEL); - check_error(); - glActiveTexture(GL_TEXTURE1); - check_error(); - glBindTexture(GL_TEXTURE_2D, 0); - check_error(); - glActiveTexture(GL_TEXTURE0); - glEnable(GL_BLEND); - check_error(); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - check_error(); - - // wheel - glBegin(GL_QUADS); - - glTexCoord2f(0.0f, 1.0f); - glVertex2f(0.0f, y); - - glTexCoord2f(1.0f, 1.0f); - glVertex2f(0.2f * 9.0f / 16.0f, y); - - glTexCoord2f(1.0f, 0.0f); - glVertex2f(0.2f * 9.0f / 16.0f, y + 0.2f); - - glTexCoord2f(0.0f, 0.0f); - glVertex2f(0.0f, y + 0.2f); - - glEnd(); - - // wheel selector - glDisable(GL_TEXTURE_2D); - glColor3f(0.0f, 0.0f, 0.0f); - glPointSize(5.0f); - glBegin(GL_POINTS); - glVertex2f((0.1f + rad * cos(theta) * 0.1f) * 9.0f / 16.0f, y + 0.1f - rad * sin(theta) * 0.1f); - glEnd(); - - // value slider - glDisable(GL_TEXTURE_2D); - glBegin(GL_QUADS); - - glColor3f(0.0f, 0.0f, 0.0f); - glVertex2f(0.22f * 9.0f / 16.0f, y); - glVertex2f(0.24f * 9.0f / 16.0f, y); - - glColor3f(1.0f, 1.0f, 1.0f); - glVertex2f(0.24f * 9.0f / 16.0f, y + 0.2f); - glVertex2f(0.22f * 9.0f / 16.0f, y + 0.2f); - - glEnd(); - - // value selector - glColor3f(0.0f, 0.0f, 0.0f); - glPointSize(5.0f); - glBegin(GL_POINTS); - glVertex2f(0.23f * 9.0f / 16.0f, y + value * 0.2f); - glEnd(); - - glColor3f(1.0f, 1.0f, 1.0f); -} - -void draw_saturation_bar(float y) -{ - glUseProgramObjectARB(0); - check_error(); - - // value slider - glDisable(GL_TEXTURE_2D); - glBegin(GL_QUADS); - - glColor3f(0.0f, 0.0f, 0.0f); - glVertex2f(0.0f * 9.0f / 16.0f, y + 0.02f); - glVertex2f(0.0f * 9.0f / 16.0f, y); - - glColor3f(1.0f, 1.0f, 1.0f); - glVertex2f(0.2f * 9.0f / 16.0f, y); - glVertex2f(0.2f * 9.0f / 16.0f, y + 0.02f); - - glEnd(); - - // value selector - glColor3f(0.0f, 0.0f, 0.0f); - glPointSize(5.0f); - glBegin(GL_POINTS); - glVertex2f(0.2f * (saturation / 4.0f) * 9.0f / 16.0f, y + 0.01f); - glEnd(); - - glColor3f(1.0f, 1.0f, 1.0f); -} - -void make_hsv_wheel_texture() -{ - static unsigned char hsv_pix[HSV_WHEEL_SIZE * HSV_WHEEL_SIZE * 4]; - for (int y = 0; y < HSV_WHEEL_SIZE; ++y) { - for (int x = 0; x < HSV_WHEEL_SIZE; ++x) { - float yf = 2.0f * y / (float)(HSV_WHEEL_SIZE) - 1.0f; - float xf = 2.0f * x / (float)(HSV_WHEEL_SIZE) - 1.0f; - float rad = hypot(xf, yf); - float theta = atan2(yf, xf); - - float r, g, b; - hsv2rgb(theta, rad, 1.0f, &r, &g, &b); - hsv_pix[(y * HSV_WHEEL_SIZE + x) * 4 + 0] = lrintf(r * 255.0f); - hsv_pix[(y * HSV_WHEEL_SIZE + x) * 4 + 1] = lrintf(g * 255.0f); - hsv_pix[(y * HSV_WHEEL_SIZE + x) * 4 + 2] = lrintf(b * 255.0f); - - if (rad > 1.0f) { - hsv_pix[(y * HSV_WHEEL_SIZE + x) * 4 + 3] = 0; - } else { - hsv_pix[(y * HSV_WHEEL_SIZE + x) * 4 + 3] = 255; - } - } - printf("\n"); - } - - glBindTexture(GL_TEXTURE_2D, HSV_WHEEL); - check_error(); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - check_error(); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, HSV_WHEEL_SIZE, HSV_WHEEL_SIZE, 0, GL_RGBA, GL_UNSIGNED_BYTE, hsv_pix); - check_error(); -} - void update_hsv() { hsv2rgb(lift_theta, lift_rad, lift_v, &lift_r, &lift_g, &lift_b); @@ -340,21 +196,6 @@ void update_hsv() printf("\n"); } -void read_colorwheel(float xf, float yf, float *rad, float *theta, float *value) -{ - if (xf < 0.2f && yf < 0.2f) { - float xp = 2.0f * xf / 0.2f - 1.0f; - float yp = -(2.0f * yf / 0.2f - 1.0f); - *rad = hypot(xp, yp); - *theta = atan2(yp, xp); - if (*rad > 1.0) { - *rad = 1.0; - } - } else if (xf >= 0.22f && xf <= 0.24f) { - *value = yf / 0.2f; - } -} - void mouse(int x, int y) { float xf = (x / (float)WIDTH) * 16.0f / 9.0f; @@ -562,7 +403,7 @@ int main(int argc, char **argv) draw_hsv_wheel(0.0f, lift_rad, lift_theta, lift_v); draw_hsv_wheel(0.2f, gamma_rad, gamma_theta, gamma_v); draw_hsv_wheel(0.4f, gain_rad, gain_theta, gain_v); - draw_saturation_bar(0.6f); + draw_saturation_bar(0.6f, saturation); SDL_GL_SwapBuffers(); check_error();