void XunoGLSLFilter::colorTransform(bool runOnce) { if (colorTransformChanged){ opengl()->setBrightness(brightness); opengl()->setContrast(contrast); opengl()->setHue(hue); opengl()->setSaturation(saturation); colorTransformChanged=!runOnce; } }
void XunoGLSLFilter::beforeRendering() { //qDebug()<<"XunoGLSLFilter::beforeRendering"<<fbo()->size(); colorTransform(); // return; if (fbo() && fbo()->isValid()){ QOpenGLFunctions *f=opengl()->openGLContext()->functions(); if (f && fbo()->textures().size()){ GLenum target=GL_TEXTURE_2D; f->glBindTexture(target,fbo()->texture()); //f->glGenerateMipmap(target); f->glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); f->glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //f->glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); //f->glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); f->glBindTexture(target,0); } } }
void JSB_register_opengl(JSContext *_cx, JS::HandleObject object) { // // gl // JS::RootedObject opengl(_cx, JS_NewObject(_cx, NULL, JS::NullPtr(), JS::NullPtr())); JS::RootedValue openglVal(_cx); openglVal = OBJECT_TO_JSVAL(opengl); JS_SetProperty(_cx, object, "gl", openglVal); JS::RootedObject ccns(_cx); get_or_create_js_obj(_cx, object, "cc", &ccns); js_register_cocos2dx_GLNode(_cx, ccns); // New WebGL functions, not present on OpenGL ES 2.0 JS_DefineFunction(_cx, opengl, "getSupportedExtensions", JSB_glGetSupportedExtensions, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "activeTexture", JSB_glActiveTexture, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_attachShader", JSB_glAttachShader, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_bindAttribLocation", JSB_glBindAttribLocation, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_bindBuffer", JSB_glBindBuffer, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_bindFramebuffer", JSB_glBindFramebuffer, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_bindRenderbuffer", JSB_glBindRenderbuffer, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_bindTexture", JSB_glBindTexture, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "blendColor", JSB_glBlendColor, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "blendEquation", JSB_glBlendEquation, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "blendEquationSeparate", JSB_glBlendEquationSeparate, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "blendFunc", JSB_glBlendFunc, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "blendFuncSeparate", JSB_glBlendFuncSeparate, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "bufferData", JSB_glBufferData, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "bufferSubData", JSB_glBufferSubData, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "checkFramebufferStatus", JSB_glCheckFramebufferStatus, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "clear", JSB_glClear, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "clearColor", JSB_glClearColor, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "clearDepthf", JSB_glClearDepthf, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "clearStencil", JSB_glClearStencil, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "colorMask", JSB_glColorMask, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_compileShader", JSB_glCompileShader, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "compressedTexImage2D", JSB_glCompressedTexImage2D, 8, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "compressedTexSubImage2D", JSB_glCompressedTexSubImage2D, 9, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "copyTexImage2D", JSB_glCopyTexImage2D, 8, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "copyTexSubImage2D", JSB_glCopyTexSubImage2D, 8, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_createProgram", JSB_glCreateProgram, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_createShader", JSB_glCreateShader, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "cullFace", JSB_glCullFace, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_deleteBuffer", JSB_glDeleteBuffers, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_deleteFramebuffer", JSB_glDeleteFramebuffers, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_deleteProgram", JSB_glDeleteProgram, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_deleteRenderbuffer", JSB_glDeleteRenderbuffers, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_deleteShader", JSB_glDeleteShader, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_deleteTexture", JSB_glDeleteTextures, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "depthFunc", JSB_glDepthFunc, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "depthMask", JSB_glDepthMask, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "depthRangef", JSB_glDepthRangef, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "detachShader", JSB_glDetachShader, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "disable", JSB_glDisable, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "disableVertexAttribArray", JSB_glDisableVertexAttribArray, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "drawArrays", JSB_glDrawArrays, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "drawElements", JSB_glDrawElements, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "enable", JSB_glEnable, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "enableVertexAttribArray", JSB_glEnableVertexAttribArray, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "finish", JSB_glFinish, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "flush", JSB_glFlush, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "framebufferRenderbuffer", JSB_glFramebufferRenderbuffer, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "framebufferTexture2D", JSB_glFramebufferTexture2D, 5, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "frontFace", JSB_glFrontFace, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_createBuffer", JSB_glGenBuffers, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_createFramebuffer", JSB_glGenFramebuffers, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_createRenderbuffer", JSB_glGenRenderbuffers, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_createTexture", JSB_glGenTextures, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "generateMipmap", JSB_glGenerateMipmap, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getActiveAttrib", JSB_glGetActiveAttrib, 7, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getActiveUniform", JSB_glGetActiveUniform, 7, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getAttachedShaders", JSB_glGetAttachedShaders, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getAttribLocation", JSB_glGetAttribLocation, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "getError", JSB_glGetError, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getProgramInfoLog", JSB_glGetProgramInfoLog, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getProgramParameter", JSB_glGetProgramiv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getShaderInfoLog", JSB_glGetShaderInfoLog, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getShaderSource", JSB_glGetShaderSource, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getShaderParameter", JSB_glGetShaderiv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "getTexParameter", JSB_glGetTexParameterfv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getUniformLocation", JSB_glGetUniformLocation, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_getUniform", JSB_glGetUniformfv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "hint", JSB_glHint, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "isBuffer", JSB_glIsBuffer, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "isEnabled", JSB_glIsEnabled, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "isFramebuffer", JSB_glIsFramebuffer, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "isProgram", JSB_glIsProgram, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "isRenderbuffer", JSB_glIsRenderbuffer, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "isShader", JSB_glIsShader, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "isTexture", JSB_glIsTexture, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "lineWidth", JSB_glLineWidth, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_linkProgram", JSB_glLinkProgram, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "pixelStorei", JSB_glPixelStorei, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "polygonOffset", JSB_glPolygonOffset, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "readPixels", JSB_glReadPixels, 7, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "releaseShaderCompiler", JSB_glReleaseShaderCompiler, 0, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "renderbufferStorage", JSB_glRenderbufferStorage, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "sampleCoverage", JSB_glSampleCoverage, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "scissor", JSB_glScissor, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_shaderSource", JSB_glShaderSource, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "stencilFunc", JSB_glStencilFunc, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "stencilFuncSeparate", JSB_glStencilFuncSeparate, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "stencilMask", JSB_glStencilMask, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "stencilMaskSeparate", JSB_glStencilMaskSeparate, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "stencilOp", JSB_glStencilOp, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "stencilOpSeparate", JSB_glStencilOpSeparate, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_texImage2D", JSB_glTexImage2D, 9, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "texParameterf", JSB_glTexParameterf, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "texParameteri", JSB_glTexParameteri, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_texSubImage2D", JSB_glTexSubImage2D, 9, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform1f", JSB_glUniform1f, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform1fv", JSB_glUniform1fv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform1i", JSB_glUniform1i, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform1iv", JSB_glUniform1iv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform2f", JSB_glUniform2f, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform2fv", JSB_glUniform2fv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform2i", JSB_glUniform2i, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform2iv", JSB_glUniform2iv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform3f", JSB_glUniform3f, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform3fv", JSB_glUniform3fv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform3i", JSB_glUniform3i, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform3iv", JSB_glUniform3iv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform4f", JSB_glUniform4f, 5, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform4fv", JSB_glUniform4fv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform4i", JSB_glUniform4i, 5, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniform4iv", JSB_glUniform4iv, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniformMatrix2fv", JSB_glUniformMatrix2fv, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniformMatrix3fv", JSB_glUniformMatrix3fv, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "uniformMatrix4fv", JSB_glUniformMatrix4fv, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_useProgram", JSB_glUseProgram, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "_validateProgram", JSB_glValidateProgram, 1, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "vertexAttrib1f", JSB_glVertexAttrib1f, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "vertexAttrib1fv", JSB_glVertexAttrib1fv, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "vertexAttrib2f", JSB_glVertexAttrib2f, 3, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "vertexAttrib2fv", JSB_glVertexAttrib2fv, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "vertexAttrib3f", JSB_glVertexAttrib3f, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "vertexAttrib3fv", JSB_glVertexAttrib3fv, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "vertexAttrib4f", JSB_glVertexAttrib4f, 5, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "vertexAttrib4fv", JSB_glVertexAttrib4fv, 2, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "vertexAttribPointer", JSB_glVertexAttribPointer, 6, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); JS_DefineFunction(_cx, opengl, "viewport", JSB_glViewport, 4, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE ); }
int main(int argc, char** argv) { int level = 1; int num_levels = 13; bool running_outer = true; Defcronyke::WindowConfig window_config; window_config.title = "Box Hunter v0.0.1"; window_config.width = 800; window_config.height = 600; Defcronyke::Window window(window_config); window.open(); while (running_outer) { Defcronyke::OpenGL opengl(window_config); // use default matrices if (!opengl.init()) return 1; GLuint shader_program_id = opengl.load_shaders( "shaders/default_vertex.glsl", "shaders/default_fragment.glsl"); if (!shader_program_id) return 1; std::vector<Defcronyke::GameObject*> objects; if (level == 1) Defcronyke::Level001 level001(objects, window_config); else if (level == 2) Defcronyke::Level002 level002(objects, window_config); else if (level == 3) Defcronyke::Level003 level003(objects, window_config); else if (level == 4) Defcronyke::Level004 level004(objects, window_config); else if (level == 5) Defcronyke::Level005 level005(objects, window_config); else if (level == 6) Defcronyke::Level006 level006(objects, window_config); else if (level == 7) Defcronyke::Level007 level007(objects, window_config); else if (level == 8) Defcronyke::Level008 level008(objects, window_config); else if (level == 9) Defcronyke::Level009 level009(objects, window_config); else if (level == 10) Defcronyke::Level010 level010(objects, window_config); else if (level == 11) Defcronyke::Level011 level011(objects, window_config); else if (level == 12) Defcronyke::Level012 level012(objects, window_config); else if (level == 13) Defcronyke::Level013 level013(objects, window_config); else { std::cout << "Congratulations, you beat the game!" << std::endl; level = 1; continue; } std::cout << "Level " << level << std::endl; if (!opengl.init_buffers(shader_program_id, objects)) return 1; Defcronyke::Physics2DConfig physics_config; physics_config.gravity.y = -2.0f; Defcronyke::Physics2D physics(physics_config); if (!physics.init(objects)) return 1; int running_inner = 1; // main loop while(running_inner == 1) { running_inner = physics.step(objects); // events are handled in here opengl.update(shader_program_id, objects); opengl.clear(); opengl.draw(shader_program_id, objects); window.swap_buffers(); } std::vector<Defcronyke::GameObject*>::reverse_iterator it; // cleanup for (it = objects.rbegin(); it != objects.rend(); ++it) { if (*it) delete (*it); objects.pop_back(); } objects.resize(0); if (running_inner == 0) { running_outer = false; } else if (running_inner == 2) { level++; } else if (running_inner == 3) // if died { continue; } else if (running_inner == 4) // if reloaded level (the F1 key) { continue; } else if (running_inner == 5) { level--; } if (level <= 0) level = num_levels; } return 0; }
void XunoGLSLFilter::afterRendering() { //qDebug()<<"XunoGLSLFilter::afterRendering()"; //return; lastSuperscaleTexureId=0; pass=0; if (fbo() && fbo()->isValid() ) { //need save image after rendering if (needSave){ QString name=defineFileName(); if (name.isEmpty()) name=savePath.append(QString("SaveFBOafterRendering-%1.tif").arg(QDateTime().currentMSecsSinceEpoch())); qDebug()<<"XunoGLSLFilter::afterRendering() fbo size() saving"<<fbo()->size()<<name; //SAVE FBO for text result; QImage s=fbo()->toImage(false); //QMatrix matrix = QMatrix().scale(1,-1); //OpenGL rotate; //s.transformed(matrix).save(name); if (m_player->videoCapture()->quality()>0){ s.save(name,Q_NULLPTR,m_player->videoCapture()->quality()); }else{ s.save(name); } needSave=false; } //clear custom programs and fbos while (m_fbo.size()) { delete m_fbo.takeLast(); } while (programs.size()) { delete programs.takeLast(); } //need superscale image after rendering and replace fbo for show by opengl if (0 && needSuperScale){ superscale(2.0f,1.0f); } GLuint sfbotextid; if (1){ sfbotextid=sharpShader(frameTexture()); if (sfbotextid) lastSuperscaleTexureId=sfbotextid; } needAdaptiveSharpen=needSuperScale; if (0 && needAdaptiveSharpen){ sfbotextid=adaptiveSharpen(frameTexture()); if (sfbotextid) lastSuperscaleTexureId=sfbotextid; } //fxaa if (needToUseFXAAFiltering){ sfbotextid=fxaaShader(frameTexture()); if (sfbotextid) lastSuperscaleTexureId=sfbotextid; } //need last linear filtering image if (needSuperScaleLastLinearFiltering){ QOpenGLFunctions *f=opengl()->openGLContext()->functions(); if (f && fbo()->textures().size()){ GLenum target=GL_TEXTURE_2D; f->glBindTexture(target,frameTexture()); //f->glGenerateMipmap(target); //TextureMinFilter //#define GL_NEAREST_MIPMAP_NEAREST 0x2700 //#define GL_LINEAR_MIPMAP_NEAREST 0x2701 //#define GL_NEAREST_MIPMAP_LINEAR 0x2702 //#define GL_LINEAR_MIPMAP_LINEAR 0x2703 f->glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); f->glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//GL_LINEAR //GL_LINEAR_MIPMAP_LINEAR f->glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); f->glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); f->glBindTexture(target,0); } } } }
GLuint XunoGLSLFilter::adaptiveSharpen(GLuint pfbotextid) { //qDebug()<<"XunoGLSLFilter::adaptiveSharpen"; int prid=-1; QOpenGLFunctions *f=opengl()->openGLContext()->functions(); if (!f) { qDebug()<<"adaptiveSharpen skipped 2"; return 0; } GLuint fbotextid; for (pass=0;pass<=maxPass_adaptive_sahrpen;pass++){ //qDebug()<<"adaptiveSharpen pass"<<pass; prid=addProgram(); QOpenGLShaderProgram *program=Q_NULLPTR; if (prid!=-1){ program=programs.at(prid); }else{ qDebug()<<"programs not is"<<prid; return 0; } if (program==Q_NULLPTR) { qDebug()<<"adaptiveSharpen skipped 3, prid"<<prid; return 0; } int fboID; if (pass==0) { fboID = addFBO(2,false); }else{ fboID = addFBO(1,false); } //program->removeAllShaders(); if (shader_files_adaptive_sharpen.size()){ QString filename; filename=QString(shader_files_prefix).append(shader_vertex_files.at(0)); //qDebug()<<Shader; // Compile vertex shader if (!program->addShaderFromSourceFile(QOpenGLShader::Vertex, filename)){ qDebug()<<"Vertex Shader error load"<<filename ; return 0; } filename=QString(shader_files_prefix).append(shader_files_adaptive_sharpen.at(pass)); //qDebug()<<"Vertex Shader load"<<filename ; // Compile vertex shader if (!program->addShaderFromSourceFile(QOpenGLShader::Fragment, filename)){ qDebug()<<"Fragment Shader error load"<<filename ; return 0; } if (!program->link()) { qDebug()<<"Fragment Shader error link"<<filename ; qDebug()<<program->log(); qDebug()<<program->shaders().at(0)->sourceCode(); qDebug()<<program->shaders().at(1)->sourceCode(); return 0; } } // qDebug()<<program->shaders().at(0)->sourceCode(); // qDebug()<<program->shaders().at(1)->sourceCode(); m_fbo[fboID]->bind(); f->glViewport(0,0,m_fbo[fboID]->width(),m_fbo[fboID]->height()); program->bind(); // qDebug()<<"ShaderFilterXuno::compile() Sharer vertex:"; // qDebug()<<program->shaders().at(0)->sourceCode(); // qDebug()<<"ShaderFilterXuno::compile() Sharer fragment:"; // qDebug()<<program->shaders().at(1)->sourceCode(); //qDebug()<<"texture0 is"; program->setUniformValue("texture0", 0); QVector2D textureSize=QVector2D (float(m_fbo[fboID]->width()),float(m_fbo[fboID]->height())); //qDebug()<<"texture_size0 is"; program->setUniformValue("u_textureSize", textureSize); //qDebug()<<"pixel_size0 is"; program->setUniformValue("u_texelSize", QVector2D(1.0f,1.0f)/textureSize); //qDebug()<<"texture_rot0 is"; program->setUniformValue("texture_rot0", QVector2D(0.0f,0.0f)); QMatrix4x4 matrix; matrix.setToIdentity(); program->setUniformValue("MVPMatrix", matrix); f->glActiveTexture(GL_TEXTURE0); f->glBindTexture(GL_TEXTURE_2D, pfbotextid); f->glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//GL_NEAREST GL_LINEAR f->glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); f->glClearColor(0.0,0.0,1.0,1.0);//BLUE f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if ( geometries==Q_NULLPTR) geometries = new GeometryEngine; if ( geometries!=Q_NULLPTR) geometries->drawCubeGeometry(program); f->glBindTexture(GL_TEXTURE_2D, 0); program->release(); m_fbo[fboID]->release(); fbotextid=m_fbo[fboID]->texture(); pfbotextid=fbotextid; //qDebug()<<"pfbotextid"<<pfbotextid; } return fbotextid; }
XunoGLSLFilter::XunoGLSLFilter(QObject *parent): QtAV::GLSLFilter(parent) { qDebug()<<"constructor XunoGLSLFilter::XunoGLSLFilter"; if (opengl()){ qDebug()<<"connect XunoGLSLFilter::XunoGLSLFilter"; connect(opengl(), &QtAV::OpenGLVideo::beforeRendering, this, &XunoGLSLFilter::beforeRendering, Qt::DirectConnection); connect(opengl(), &QtAV::OpenGLVideo::afterRendering, this, &XunoGLSLFilter::afterRendering, Qt::DirectConnection); } shader_files_prefix=":/shaders/"; //shader_files_prefix="/home/lex/project-C/github/SuperXbr-GL/depend/common-shaders/xbr/"; // shader_files_include="shaders/super-xbr/super-xbr-params.inc"; // shader_files<<"shaders/super-xbr/super-xbr-fast-pass0.glsl"; // shader_files<<"shaders/super-xbr/super-xbr-fast-pass1.glsl"; // shader_files<<"shaders/super-xbr/super-xbr-fast-pass2.glsl"; // shader_files<<"shaders/super-xbr/custom-jinc2-sharper.glsl"; //shader_files_include="super-xbr-params.inc"; shader_files_include=""; if (shader_vertex_files.isEmpty()){ shader_vertex_files<<"superxbr-naitive-vertex.glsl"; } // shader_files<<"super-xbr-pass0.glsl"; // shader_files<<"super-xbr-pass1.glsl"; // shader_files<<"super-xbr-pass2.glsl"; // shader_files<<"custom-jinc2-sharper.glsl"; if (shader_files.isEmpty()){ shader_files<<"superxbr-native-pass0.glsl"; shader_files<<"superxbr-native-pass1.glsl"; //shader_files<<"superxbr-native-pass2.glsl"; } maxPass=shader_files.size()-1; if (scales.isEmpty()){ scales<<2<<1<<1<<1<<1; } if (shader_files_adaptive_sharpen.isEmpty()){ // shader_files_adaptive_sharpen<<"adaptive-sharpen-pass0-0.glsl"; shader_files_adaptive_sharpen<<"adaptive-sharpen-v2-pass0-1.glsl"; shader_files_adaptive_sharpen<<"adaptive-sharpen-v2-pass1-0.glsl"; // shader_files_adaptive_sharpen<<"adaptive-sharpen-pass0-1.glsl"; // shader_files_adaptive_sharpen<<"adaptive-sharpen-pass1-0.glsl"; // shader_files_adaptive_sharpen<<"adaptive-sharpen-pass1-1.glsl"; // shader_files_adaptive_sharpen<<"adaptive-sharpen-pass1-2.glsl"; } maxPass_adaptive_sahrpen=shader_files_adaptive_sharpen.size()-1; if (shader_files_fxaa.isEmpty()){ shader_files_fxaa<<"fxaa-sharpen-v2-pass0.glsl"; } }
GLuint XunoGLSLFilter::sharpShader(GLuint pfbotextid) { // qDebug()<<"XunoGLSLFilter::sharpShader"; ShaderFilterXuno *m_sharpShader = static_cast <ShaderFilterXuno*> (user_shader); if (!m_sharpShader) { qDebug()<<"m_sharpShader skipped 0"; return 0; } // qDebug()<<"getFilterSharp()"<<m_sharpShader->getFilterSharp(); // if (!m_sharpShader->needToRun()) { // //qDebug()<<"m_sharpShader skipped 1"; // return 0; // } int prid=-1; prid=addProgram(); QOpenGLShaderProgram *program=Q_NULLPTR; if (prid!=1){ program=programs.at(prid); }else{ qDebug()<<"programs not is"<<prid; return 0; } QOpenGLFunctions *f=opengl()->openGLContext()->functions(); if (!f) { qDebug()<<"m_sharpShader skipped 2"; return 0; } if (program==Q_NULLPTR) { qDebug()<<"m_sharpShader skipped 3, prid"<<prid; return 0; } int fboID=addFBO(1,false); program->removeAllShaders(); if (shader_files.size()){ QString filename; filename=QString(shader_files_prefix).append(shader_vertex_files.at(0)); //qDebug()<<Shader; // Compile vertex shader if (!program->addShaderFromSourceFile(QOpenGLShader::Vertex, filename)){ return 0; } } //qDebug()<<"XunoGLSLFilter::sharpShader.userShaderHeader: "; m_sharpShader->setCustomProgram(program); m_sharpShader->compile(); //qDebug()<<"getFilterSharp:"<<m_sharpShader->getFilterSharp(); if (!program->isLinked()) return 0; m_fbo[fboID]->bind(); f->glViewport(0,0,m_fbo[fboID]->width(),m_fbo[fboID]->height()); program->bind(); m_sharpShader->setUserUniformValues(); // qDebug()<<"ShaderFilterXuno::compile() Sharer vertex:"; // qDebug()<<program->shaders().at(0)->sourceCode(); // qDebug()<<"ShaderFilterXuno::compile() Sharer fragment:"; // qDebug()<<program->shaders().at(1)->sourceCode(); //qDebug()<<"texture0 is"; program->setUniformValue("texture0", 0); QVector2D textureSize=QVector2D (float(m_fbo[fboID]->width()),float(m_fbo[fboID]->height())); //qDebug()<<"texture_size0 is"; program->setUniformValue("u_textureSize", textureSize); //qDebug()<<"pixel_size0 is"; program->setUniformValue("u_texelSize", QVector2D(1.0f,1.0f)/textureSize); //qDebug()<<"texture_rot0 is"; program->setUniformValue("texture_rot0", QVector2D(0.0f,0.0f)); QMatrix4x4 matrix; matrix.setToIdentity(); program->setUniformValue("MVPMatrix", matrix); f->glActiveTexture(GL_TEXTURE0); f->glBindTexture(GL_TEXTURE_2D, pfbotextid); f->glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//GL_NEAREST GL_LINEAR f->glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); f->glClearColor(0.0,1.0,0.0,1.0);//GREEN f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if ( geometries==Q_NULLPTR) geometries = new GeometryEngine; if ( geometries!=Q_NULLPTR) geometries->drawCubeGeometry(program); f->glBindTexture(GL_TEXTURE_2D, 0); program->release(); m_fbo[fboID]->release(); //delete m_sharpShader; return m_fbo[fboID]->texture(); }
//opt_sharpness [0...2] default 1.0f //opt_edge_strength [0...1] default 0.6f void XunoGLSLFilter::superscale(GLfloat opt_sharpness, GLfloat opt_edge_strength) { if ( geometries==Q_NULLPTR) geometries = new GeometryEngine; QOpenGLFunctions *f=opengl()->openGLContext()->functions(); if (!f) return; //if (initSize.isEmpty()){ initSize=outputSize(); //} //qDebug()<<"superscale" << initSize; //setOutputSize(initSize*2); //qDebug()<<"superscale x2" << outputSize(); //initTextures(); frame++; // Enable depth buffer f->glEnable(GL_DEPTH_TEST); // Enable back face culling // QtAV move freeze with it. //f->glEnable(GL_CULL_FACE); //--------------------------------------------- //GLuint fbotextid=texture->textureId(); GLuint fbotextid=fbo()->texture(); //used last fbo of player as source frame //qDebug()<<"Texture id start"<<fbotextid<<"texure size:"<<texture->width()<<"x"<<texture->height(); for (pass=0;pass<=maxPass;pass++){ bool rotate=false;//(pass>0); //qDebug()<<"Programs:"<< addProgram(); if (initShaders_xbr(pass) && !scales.isEmpty()){ int fboID=addFBO(scales.at(pass),/*rotate*/0); QOpenGLShaderProgram *program=Q_NULLPTR; if (pass<=programs.size()){ program=programs.at(pass); } m_fbo[fboID]->bind(); f->glViewport(0,0,m_fbo[fboID]->width(),m_fbo[fboID]->height()); // Use texture unit 0 which contains cube.png program->bind(); //qDebug()<<"texture0 is"; program->setUniformValue("texture0", 0); QVector2D textureSize=QVector2D (float(m_fbo[fboID]->width()),float(m_fbo[fboID]->height())); //qDebug()<<"texture_size0 is"; program->setUniformValue("texture_size0", textureSize); //qDebug()<<"pixel_size0 is"; program->setUniformValue("pixel_size0", QVector2D(1.0f,1.0f)/textureSize); //qDebug()<<"texture_rot0 is"; program->setUniformValue("texture_rot0", QVector2D(0.0f,0.0f)); //options program->setUniformValue("sharpness", opt_sharpness); // [0...2] default 1.0f program->setUniformValue("edge_strength",opt_edge_strength); // [0...1] default 0.6f QMatrix4x4 matrix; matrix.setToIdentity(); if (rotate) { int sign=(pass==2)?-1:1; matrix.rotate(180*sign,0.,0.,1.); } program->setUniformValue("MVPMatrix", matrix); //if (1) { //if (0){ //pass==0 // f->glActiveTexture(GL_TEXTURE0); // texture->bind(); //}else{ f->glActiveTexture(GL_TEXTURE0); f->glBindTexture(GL_TEXTURE_2D, fbotextid); f->glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//GL_NEAREST GL_LINEAR f->glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); //f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);//GL_CLAMP_TO_EDGE //f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); //} f->glClearColor(1.0,0.0,0.0,1.0);//RED f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Draw cube geometry geometries->drawCubeGeometry(program); // if (0){//pass==0 // texture->release(); // }else{ f->glBindTexture(GL_TEXTURE_2D, 0); // } // } program->release(); m_fbo[fboID]->release(); #if (unix) // QString filename=QString("/home/lex/temp/savefbo_pass_%1_%2x%3-%4.bmp").arg(pass).arg(m_fbo[fboID]->width()).arg(m_fbo[fboID]->height()).arg(frame); #else // QString filename=QString("e:/temp/shader/savefbo_pass_%1_%2x%3-%4.bmp").arg(pass).arg(m_fbo[fboID]->width()).arg(m_fbo[fboID]->height()).arg(frame); #endif // qDebug()<<"Saving:"<<filename; // m_fbo[fboID]->toImage(false).save(filename); fbotextid=m_fbo[fboID]->texture(); //qDebug()<<"Texture id"<<fbotextid<<"texure size:"<<m_fbo[fboID]->width()<<"x"<<m_fbo[fboID]->height(); }else{ qDebug()<<"initShaders error (pass)"<<pass; } } if (fbotextid) lastSuperscaleTexureId=fbotextid; }