int lua_RenderStateStateBlock_setDepthWrite(lua_State* state) { // Get the number of parameters. int paramCount = lua_gettop(state); // Attempt to match the parameters to a valid binding. switch (paramCount) { case 2: { if ((lua_type(state, 1) == LUA_TUSERDATA) && lua_type(state, 2) == LUA_TBOOLEAN) { // Get parameter 1 off the stack. bool param1 = ScriptUtil::luaCheckBool(state, 2); RenderState::StateBlock* instance = getInstance(state); instance->setDepthWrite(param1); return 0; } lua_pushstring(state, "lua_RenderStateStateBlock_setDepthWrite - Failed to match the given parameters to a valid function signature."); lua_error(state); break; } default: { lua_pushstring(state, "Invalid number of parameters (expected 2)."); lua_error(state); break; } } return 0; }
int lua_RenderStateStateBlock_addRef(lua_State* state) { // Get the number of parameters. int paramCount = lua_gettop(state); // Attempt to match the parameters to a valid binding. switch (paramCount) { case 1: { if ((lua_type(state, 1) == LUA_TUSERDATA)) { RenderState::StateBlock* instance = getInstance(state); instance->addRef(); return 0; } lua_pushstring(state, "lua_RenderStateStateBlock_addRef - Failed to match the given parameters to a valid function signature."); lua_error(state); break; } default: { lua_pushstring(state, "Invalid number of parameters (expected 1)."); lua_error(state); break; } } return 0; }
int lua_RenderStateStateBlock_setBlendSrc(lua_State* state) { // Get the number of parameters. int paramCount = lua_gettop(state); // Attempt to match the parameters to a valid binding. switch (paramCount) { case 2: { if ((lua_type(state, 1) == LUA_TUSERDATA) && (lua_type(state, 2) == LUA_TSTRING || lua_type(state, 2) == LUA_TNIL)) { // Get parameter 1 off the stack. RenderState::Blend param1 = (RenderState::Blend)lua_enumFromString_RenderStateBlend(luaL_checkstring(state, 2)); RenderState::StateBlock* instance = getInstance(state); instance->setBlendSrc(param1); return 0; } lua_pushstring(state, "lua_RenderStateStateBlock_setBlendSrc - Failed to match the given parameters to a valid function signature."); lua_error(state); break; } default: { lua_pushstring(state, "Invalid number of parameters (expected 2)."); lua_error(state); break; } } return 0; }
void Form::setNode(Node* node) { // If the user wants a custom node then we need to create a 3D quad if (node && node != _node) { // Set this Form up to be 3D by initializing a quad. float x2 = _bounds.width; float y2 = _bounds.height; float vertices[] = { 0, y2, 0, 0, _v1, 0, 0, 0, 0, 0, x2, y2, 0, _u2, _v1, x2, 0, 0, _u2, 0 }; VertexFormat::Element elements[] = { VertexFormat::Element(VertexFormat::POSITION, 3), VertexFormat::Element(VertexFormat::TEXCOORD0, 2) }; Mesh* mesh = Mesh::createMesh(VertexFormat(elements, 2), 4, false); GP_ASSERT(mesh); mesh->setPrimitiveType(Mesh::TRIANGLE_STRIP); mesh->setVertexData(vertices, 0, 4); _nodeQuad = Model::create(mesh); SAFE_RELEASE(mesh); GP_ASSERT(_nodeQuad); // Create the effect and material Effect* effect = createEffect(); GP_ASSERT(effect); _nodeMaterial = Material::create(effect); GP_ASSERT(_nodeMaterial); _nodeQuad->setMaterial(_nodeMaterial); _nodeMaterial->release(); node->setModel(_nodeQuad); _nodeQuad->release(); // Bind the WorldViewProjection matrix. _nodeMaterial->setParameterAutoBinding("u_worldViewProjectionMatrix", RenderState::WORLD_VIEW_PROJECTION_MATRIX); // Bind the texture from the framebuffer and set the texture to clamp Texture::Sampler* sampler = Texture::Sampler::create(_frameBuffer->getRenderTarget()->getTexture()); GP_ASSERT(sampler); sampler->setWrapMode(Texture::CLAMP, Texture::CLAMP); _nodeMaterial->getParameter("u_texture")->setValue(sampler); sampler->release(); RenderState::StateBlock* rsBlock = _nodeMaterial->getStateBlock(); rsBlock->setDepthWrite(true); rsBlock->setBlend(true); rsBlock->setBlendSrc(RenderState::BLEND_SRC_ALPHA); rsBlock->setBlendDst(RenderState::BLEND_ONE_MINUS_SRC_ALPHA); } _node = node; }
int gpmat::setState( char *name, char *value ) { RenderState::StateBlock *state; if ( _material == NULL ) return -1; state = _material->getStateBlock(); state->setState( name, value ); return 0; }
int lua_RenderStateStateBlock_setStencilFunction(lua_State* state) { // Get the number of parameters. int paramCount = lua_gettop(state); // Attempt to match the parameters to a valid binding. switch (paramCount) { case 4: { if ((lua_type(state, 1) == LUA_TUSERDATA) && (lua_type(state, 2) == LUA_TSTRING || lua_type(state, 2) == LUA_TNIL) && lua_type(state, 3) == LUA_TNUMBER && lua_type(state, 4) == LUA_TNUMBER) { // Get parameter 1 off the stack. RenderState::StencilFunction param1 = (RenderState::StencilFunction)lua_enumFromString_RenderStateStencilFunction(luaL_checkstring(state, 2)); // Get parameter 2 off the stack. int param2 = (int)luaL_checkint(state, 3); // Get parameter 3 off the stack. unsigned int param3 = (unsigned int)luaL_checkunsigned(state, 4); RenderState::StateBlock* instance = getInstance(state); instance->setStencilFunction(param1, param2, param3); return 0; } lua_pushstring(state, "lua_RenderStateStateBlock_setStencilFunction - Failed to match the given parameters to a valid function signature."); lua_error(state); break; } default: { lua_pushstring(state, "Invalid number of parameters (expected 4)."); lua_error(state); break; } } return 0; }
int lua_RenderStateStateBlock_setState(lua_State* state) { // Get the number of parameters. int paramCount = lua_gettop(state); // Attempt to match the parameters to a valid binding. switch (paramCount) { case 3: { if ((lua_type(state, 1) == LUA_TUSERDATA) && (lua_type(state, 2) == LUA_TSTRING || lua_type(state, 2) == LUA_TNIL) && (lua_type(state, 3) == LUA_TSTRING || lua_type(state, 3) == LUA_TNIL)) { // Get parameter 1 off the stack. const char* param1 = ScriptUtil::getString(2, false); // Get parameter 2 off the stack. const char* param2 = ScriptUtil::getString(3, false); RenderState::StateBlock* instance = getInstance(state); instance->setState(param1, param2); return 0; } else { lua_pushstring(state, "lua_RenderStateStateBlock_setState - Failed to match the given parameters to a valid function signature."); lua_error(state); } break; } default: { lua_pushstring(state, "Invalid number of parameters (expected 3)."); lua_error(state); break; } } return 0; }
void Form::initializeQuad(Mesh* mesh) { // Release current model. SAFE_RELEASE(_quad); // Create the model _quad = Model::create(mesh); // Create the material Material* material = _quad->setMaterial("res/shaders/textured.vsh", "res/shaders/textured.fsh"); // Set the common render state block for the material RenderState::StateBlock* stateBlock = _theme->getSpriteBatch()->getStateBlock(); stateBlock->setDepthWrite(true); material->setStateBlock(stateBlock); // Bind the WorldViewProjection matrix material->setParameterAutoBinding("u_worldViewProjectionMatrix", RenderState::WORLD_VIEW_PROJECTION_MATRIX); // Create a FrameBuffer if necessary. if (!_frameBuffer) { _frameBuffer = FrameBuffer::create(_id.c_str()); } // Use the FrameBuffer to texture the quad. if (!_frameBuffer->getRenderTarget()) { RenderTarget* rt = RenderTarget::create(_id.c_str(), _bounds.width, _bounds.height); _frameBuffer->setRenderTarget(rt); SAFE_RELEASE(rt); } Texture::Sampler* sampler = Texture::Sampler::create(_frameBuffer->getRenderTarget()->getTexture()); sampler->setWrapMode(Texture::CLAMP, Texture::CLAMP); material->getParameter("u_texture")->setValue(sampler); material->getParameter("u_textureRepeat")->setValue(Vector2::one()); material->getParameter("u_textureTransform")->setValue(Vector2::zero()); SAFE_RELEASE(sampler); }
int lua_RenderStateStateBlock_getRefCount(lua_State* state) { // Get the number of parameters. int paramCount = lua_gettop(state); // Attempt to match the parameters to a valid binding. switch (paramCount) { case 1: { if ((lua_type(state, 1) == LUA_TUSERDATA)) { RenderState::StateBlock* instance = getInstance(state); unsigned int result = instance->getRefCount(); // Push the return value onto the stack. lua_pushunsigned(state, result); return 1; } else { lua_pushstring(state, "lua_RenderStateStateBlock_getRefCount - Failed to match the given parameters to a valid function signature."); lua_error(state); } break; } default: { lua_pushstring(state, "Invalid number of parameters (expected 1)."); lua_error(state); break; } } return 0; }
Material *gamehsp::makeMaterialTex2D( char *fname, int matopt ) { bool mipmap; mipmap = (matopt & GPOBJ_MATOPT_NOMIPMAP ) == 0; Texture* texture = Texture::create(fname); if ( texture == NULL ) { Alertf("Texture not found.(%s)",fname); return NULL; } _tex_width = texture->getWidth(); _tex_height = texture->getHeight(); // Search for the first sampler uniform in the effect. Uniform* samplerUniform = NULL; for (unsigned int i = 0, count = _spriteEffect->getUniformCount(); i < count; ++i) { Uniform* uniform = _spriteEffect->getUniform(i); if (uniform && uniform->getType() == GL_SAMPLER_2D) { samplerUniform = uniform; break; } } if (!samplerUniform) { GP_ERROR("No uniform of type GL_SAMPLER_2D found in sprite effect."); return NULL; } RenderState::StateBlock *state; // Wrap the effect in a material Material* mesh_material = Material::create(_spriteEffect); // +ref effect // Bind the texture to the material as a sampler Texture::Sampler* sampler = Texture::Sampler::create(texture); // +ref texture mesh_material->getParameter(samplerUniform->getName())->setValue(sampler); /* Material* mesh_material = Material::create( SPRITE_VSH, SPRITE_FSH, NULL ); if ( mesh_material == NULL ) { GP_ERROR("2D initalize failed."); return NULL; } mesh_material->getParameter("u_diffuseTexture")->setValue( fname, mipmap ); */ mesh_material->getParameter("u_projectionMatrix")->setValue(_projectionMatrix2D); state = mesh_material->getStateBlock(); state->setCullFace(false); state->setDepthTest(false); state->setDepthWrite(false); state->setBlend(true); state->setBlendSrc(RenderState::BLEND_SRC_ALPHA); state->setBlendDst(RenderState::BLEND_ONE_MINUS_SRC_ALPHA); SAFE_RELEASE( texture ); return mesh_material; }
float gamehsp::setMaterialBlend( Material* material, int gmode, int gfrate ) { // プレンド描画設定 // gmdoe : HSPのgmode値 // gfrate : HSPのgfrate値 // (戻り値=alpha値(0.0〜1.0)) // RenderState::StateBlock *state; float alpha; state = material->getStateBlock(); //ブレンドモード設定 switch( gmode ) { case 0: //no blend state->setBlendSrc(RenderState::BLEND_ONE); state->setBlendDst(RenderState::BLEND_ZERO); alpha = 1.0f; break; case 1: //blend+alpha one case 2: //blend+alpha one state->setBlendSrc(RenderState::BLEND_SRC_ALPHA); state->setBlendDst(RenderState::BLEND_ONE_MINUS_SRC_ALPHA); alpha = 1.0f; break; case 5: //add state->setBlendSrc(RenderState::BLEND_SRC_ALPHA); state->setBlendDst(RenderState::BLEND_ONE); alpha = ((float)gfrate) * _colrate; break; case 6: //sub state->setBlendSrc(RenderState::BLEND_ONE_MINUS_DST_COLOR); state->setBlendDst(RenderState::BLEND_ZERO); alpha = ((float)gfrate) * _colrate; break; default: //normal blend state->setBlendSrc(RenderState::BLEND_SRC_ALPHA); state->setBlendDst(RenderState::BLEND_ONE_MINUS_SRC_ALPHA); alpha = ((float)gfrate) * _colrate; break; } return alpha; }
void gamehsp::setMaterialDefaultBinding( Material* material, int icolor, int matopt ) { // These parameters are normally set in a .material file but this example sets them programmatically. // Bind the uniform "u_worldViewProjectionMatrix" to use the WORLD_VIEW_PROJECTION_MATRIX from the scene's active camera and the node that the model belongs to. // material->getParameter("u_worldViewProjectionMatrix")->setValue( _camera->getWorldViewProjectionMatrix() ); // material->getParameter("u_inverseTransposeWorldViewMatrix")->setValue( _camera->getInverseTransposeWorldViewMatrix() ); // material->getParameter("u_cameraPosition")->setValue( _camera->getTranslation() ); // material->getParameter("u_worldViewProjectionMatrix")->bindValue( _camera, &Node::getWorldViewProjectionMatrix ); // material->getParameter("u_inverseTransposeWorldViewMatrix")->bindValue( _camera, &Node::getInverseTransposeWorldViewMatrix ); // material->getParameter("u_cameraPosition")->bindValue( _camera, &Node::getTranslation ); if ( hasParameter( material, "u_cameraPosition" ) ) material->setParameterAutoBinding("u_cameraPosition", "CAMERA_WORLD_POSITION"); if ( hasParameter( material, "u_worldViewProjectionMatrix" ) ) material->setParameterAutoBinding("u_worldViewProjectionMatrix", "WORLD_VIEW_PROJECTION_MATRIX"); if ( hasParameter( material, "u_inverseTransposeWorldViewMatrix" ) ) material->setParameterAutoBinding("u_inverseTransposeWorldViewMatrix", "INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX"); Vector4 color; Node *light_node; if ( _curlight < 0 ) { // カレントライトなし(シーンを参照) if ( hasParameter( material, "u_ambientColor" ) ) material->setParameterAutoBinding("u_ambientColor", "SCENE_AMBIENT_COLOR"); if ( hasParameter( material, "u_lightDirection" ) ) material->setParameterAutoBinding("u_lightDirection", "SCENE_LIGHT_DIRECTION"); if ( hasParameter( material, "u_lightColor" ) ) material->setParameterAutoBinding("u_lightColor", "SCENE_LIGHT_COLOR"); } else { // カレントライトを反映させる gpobj *lgt; lgt = getObj( _curlight ); light_node = lgt->_node; // ライトの方向設定 if ( hasParameter( material, "u_lightDirection" ) ) material->getParameter("u_lightDirection")->bindValue(light_node, &Node::getForwardVectorView); // ライトの色設定 // (リアルタイムに変更を反映させる場合は再設定が必要。現在は未対応) Vector3 *vambient; vambient = (Vector3 *)&lgt->_vec[GPOBJ_USERVEC_WORK]; if ( hasParameter( material, "u_lightColor" ) ) material->getParameter("u_lightColor")->setValue(light_node->getLight()->getColor()); if ( hasParameter( material, "u_ambientColor" ) ) material->getParameter("u_ambientColor")->setValue( vambient ); } //material->setParameterAutoBinding("u_ambientColor", "SCENE_AMBIENT_COLOR"); //material->setParameterAutoBinding("u_lightDirection", "SCENE_LIGHT_DIRECTION"); //material->setParameterAutoBinding("u_lightColor", "SCENE_LIGHT_COLOR"); colorVector3( icolor, color ); if ( hasParameter( material, "u_diffuseColor" ) ) material->getParameter("u_diffuseColor")->setValue(color); gameplay::MaterialParameter *prm_modalpha; if ( hasParameter( material, "u_modulateAlpha" ) ) prm_modalpha = material->getParameter("u_modulateAlpha"); if ( prm_modalpha ) { prm_modalpha->setValue( 1.0f ); } RenderState::StateBlock *state; state = material->getStateBlock(); state->setCullFace( (( matopt & GPOBJ_MATOPT_NOCULL )==0) ); state->setDepthTest( (( matopt & GPOBJ_MATOPT_NOZTEST )==0) ); state->setDepthWrite( (( matopt & GPOBJ_MATOPT_NOZWRITE )==0) ); state->setBlend(true); if ( matopt & GPOBJ_MATOPT_BLENDADD ) { state->setBlendSrc(RenderState::BLEND_SRC_ALPHA); state->setBlendDst(RenderState::BLEND_ONE); } else { state->setBlendSrc(RenderState::BLEND_SRC_ALPHA); state->setBlendDst(RenderState::BLEND_ONE_MINUS_SRC_ALPHA); } }