Example #1
0
void XunoGLSLFilter::colorTransform(bool runOnce)
{
    if (colorTransformChanged){
        opengl()->setBrightness(brightness);
        opengl()->setContrast(contrast);
        opengl()->setHue(hue);
        opengl()->setSaturation(saturation);
        colorTransformChanged=!runOnce;
    }
}
Example #2
0
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 );
    
}
Example #4
0
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;
}
Example #5
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);
            }
        }
    }
}
Example #6
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;
}
Example #7
0
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";
    }

}
Example #8
0
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();
}
Example #9
0
//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;
}