Skip to content

Instantly share code, notes, and snippets.

@roxlu
Created July 14, 2011 15:56
Show Gist options
  • Save roxlu/1082728 to your computer and use it in GitHub Desktop.
Save roxlu/1082728 to your computer and use it in GitHub Desktop.
#include "BlendModeTester.h"
#include "error.h"
BlendModeTester::BlendModeTester()
:is_initialized(false)
,num_tex(1)
,curr_mode(0)
,page(0)
,item(0)
{
modes.push_back(BlendMode(GL_ZERO,GL_ZERO));
modes.push_back(BlendMode(GL_ZERO,GL_ONE));
modes.push_back(BlendMode(GL_ZERO,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_ZERO,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_ZERO,GL_DST_COLOR));
modes.push_back(BlendMode(GL_ZERO,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_ZERO,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_ZERO,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_ZERO,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_ZERO,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_ZERO,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ZERO,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ZERO,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ZERO,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ZERO,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_ONE,GL_ZERO));
modes.push_back(BlendMode(GL_ONE,GL_ONE));
modes.push_back(BlendMode(GL_ONE,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE,GL_DST_COLOR));
modes.push_back(BlendMode(GL_ONE,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_ONE,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_ZERO));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_ONE));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_DST_COLOR));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_SRC_COLOR,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_ZERO));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_ONE));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_COLOR,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_DST_COLOR,GL_ZERO));
modes.push_back(BlendMode(GL_DST_COLOR,GL_ONE));
modes.push_back(BlendMode(GL_DST_COLOR,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_DST_COLOR,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_DST_COLOR,GL_DST_COLOR));
modes.push_back(BlendMode(GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_DST_COLOR,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_DST_COLOR,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_DST_COLOR,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_DST_COLOR,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_DST_COLOR,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_DST_COLOR,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_DST_COLOR,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_DST_COLOR,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_DST_COLOR,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_ZERO));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_ONE));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_ZERO));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_ONE));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_DST_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_ZERO));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_ONE));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_ZERO));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_ONE));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_DST_COLOR));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_DST_ALPHA,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_ZERO));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_ONE));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_DST_ALPHA,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_ZERO));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_ONE));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_DST_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_COLOR,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_ZERO));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_ONE));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_COLOR,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_ZERO));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_ONE));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_DST_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_CONSTANT_ALPHA,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_ZERO));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_ONE));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_ONE_MINUS_CONSTANT_ALPHA,GL_SRC_ALPHA_SATURATE));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_ZERO));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_ONE));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_SRC_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_ONE_MINUS_SRC_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_DST_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_ONE_MINUS_DST_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_SRC_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_ONE_MINUS_SRC_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_DST_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_ONE_MINUS_DST_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_ONE_MINUS_CONSTANT_COLOR));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_ONE_MINUS_CONSTANT_ALPHA));
modes.push_back(BlendMode(GL_SRC_ALPHA_SATURATE,GL_SRC_ALPHA_SATURATE));
page = 0;
ofAddListener(ofEvents.keyReleased, this, &BlendModeTester::onKeyPress);
}
BlendModeTester::~BlendModeTester() {
glDeleteFramebuffers(1, &fbo_id);
}
void BlendModeTester::setBlendMode() {
glEnable(GL_BLEND);
glBlendFunc(modes[(page*15)+item].a, modes[(page*15)+item].b);
}
void BlendModeTester::onKeyPress(ofKeyEventArgs& args) {
if(args.key == 'n') {
page++;
item = 0;
}
else if(args.key == 'p') {
page = max(--page,0);
item = 0;
}
else if(args.key == 'i') {
--item;
}
else if(args.key == 'u') {
++item;
}
item = CLAMP(item,0,15);
int dx = (page*15) + item;
if(dx > modes.size()) {
dx = modes.size() - 1;
}
else if(dx < 0) {
dx = 0;
}
cout << "page: " << page <<", item:" << item << endl;
}
void BlendModeTester::setup(int w, int h) {
glEnable(GL_TEXTURE_2D);
width = w;
height = h;
// create frame buffer for drawing container
glGenFramebuffers(1,&fbo_id); eglGetError();
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo_id); eglGetError();
// create render buffers.
glGenRenderbuffers(1, &rbo_depth); eglGetError();
// allocate memory for renderbuffer: depth dubbder
glBindRenderbuffer(GL_RENDERBUFFER, rbo_depth); eglGetError();
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT32, width, height);
// attachment points: (3rd is always GL_RENDERBUFFER for now)
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo_id); eglGetError();
glFramebufferRenderbuffer(
GL_DRAW_FRAMEBUFFER
,GL_DEPTH_ATTACHMENT
,GL_RENDERBUFFER
,rbo_depth
); eglGetError();
GLuint id = 0;
glGenTextures(1, &tex_id); eglGetError();
glBindTexture(GL_TEXTURE_2D, tex_id);
glTexImage2D(
GL_TEXTURE_2D // create a 2D texture
,0 // detail level
,GL_RGBA // how to store internally
,width
,height
,0 // border
,GL_RGBA // external r,g,b,a order
,GL_FLOAT // external data type
,NULL // the data
); eglGetError();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); eglGetError();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); eglGetError();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); eglGetError();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); eglGetError();
// set attachment point to FBO color attachments.
glFramebufferTexture2D(
GL_DRAW_FRAMEBUFFER
,GL_COLOR_ATTACHMENT0
,GL_TEXTURE_2D
,tex_id
,0
); eglGetError();
eglCheckFramebufferStatus();
is_initialized = true;
}
bool BlendModeTester::hasMoreModesToTest() {
if(!is_initialized) {
cout << "not initialized!" << endl;
return false;
}
return curr_mode < 16;
}
void BlendModeTester::nextTest() {
glPopAttrib();
glBindFramebuffer(GL_FRAMEBUFFER, 0);
++curr_mode;
}
void BlendModeTester::beginTest() {
float perc = (float)curr_mode/4;
int row = perc;
int col = (float)(perc-row) * 4;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);;
glBindFramebuffer(GL_FRAMEBUFFER, fbo_id);
glPushAttrib(GL_VIEWPORT_BIT);
glViewport(col*256,row*192,256,192);
glEnable(GL_BLEND);
glBlendFunc(modes[curr_mode+(page * 16)].a, modes[curr_mode+(page * 16)].b);
}
void BlendModeTester::endTest() {
curr_mode = 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment