void Scene::loadShader() { std::string sourcePtr = read("vshader.cg"); auto optimal = cgD3D11GetOptimalOptions(mCgVertexShaderProfile); mVertexShaderId = cgCreateProgram(mCgContext, CG_SOURCE, sourcePtr.c_str(), mCgVertexShaderProfile, "main", optimal); if(mVertexShaderId != nullptr) { optimal = cgD3D11GetOptimalOptions(mCgFragmentShaderProfile); HRESULT res = cgD3D11LoadProgram(mVertexShaderId, NULL); CGerror error; const char *errorString = cgGetLastErrorString(&error); sourcePtr = read("fshader.cg"); mFragmentShaderId = cgCreateProgram(mCgContext, CG_SOURCE, sourcePtr.c_str(), mCgFragmentShaderProfile, "main", optimal); errorString = cgGetLastErrorString(&error); res = cgD3D11LoadProgram(mFragmentShaderId, NULL); } // here the uniform can be set CGparameter location = cgGetNamedParameter(mVertexShaderId, "ambient"); checkForCgError("could not get uniform color location", mCgContext, false); cgSetParameter4fv(location, glm::value_ptr(glm::vec4(1.0,1.0,1.0,1.0))); checkForCgError("could not set uniform color", mCgContext, false); bindShader(mVertexShaderId, mFragmentShaderId); }
void cEffect::SetParam(const std::string &lacName, const cVec4 &lParamValue) { CGparameter lParam = cgGetNamedEffectParameter(mEffect, lacName.c_str() ); if (lParam) { cgSetParameter4fv(lParam, lParamValue.AsFloatPointer() ); } }
bool CgGLShader::setFloatVectorVariable(const char* name, const float4& vec) { if(mProgram) { CGparameter param = cgGetNamedParameter(mProgram, name); if(_check_error(mContext) && param) { cgSetParameter4fv(param, (const float*)vec.value); return _check_error(mContext); } } return false; }
bool GLCgShader::SetConstant(const str_type::string& name, const math::Vector4 &v) { CGparameter param = SeekParameter(name, m_params); if (!param) return ShowInvalidParameterWarning(m_shaderName, name); cgSetParameter4fv(param, (float*)&v); if (CheckForError("Shader::SetConstant4F setting parameter", m_shaderName)) return false; return true; }
void Scene::render() { //Keep the cubes rotating mCubeRotation += .05f; if(mCubeRotation > 1.0f) mCubeRotation = 0.0f; ////Reset cube1World //mCube1World = glm::mat4(); ////Define cube1's world space matrix //mRotation = glm::cross(mRotation, glm::angleAxis(mCubeRotation * 180.f / 3.14f, glm::vec3(0,1,0))); //glm::mat4 translation = glm::translate( 0.0f, 0.0f, 4.0f ); ////Set cube1's world space using the transformations //mCube1World = translation * glm::toMat4(mRotation); ////Reset cube2World //mCube1World = glm::mat4(); ////Define cube2's world space matrix //mRotation = glm::cross(-mRotation, glm::angleAxis(mCubeRotation * 180.f / 3.14f, glm::vec3(0,1,0))); //glm::mat4 scale = glm::scale( 1.3f, 1.3f, 1.3f ); ////Set cube2's world space matrix //mCube2World = glm::toMat4(mRotation) * scale; //glm::vec4 camPos = glm::vec4( 0.0f, 3.0f, -8.0f, 0.0f ); //glm::mat4 camProjection = glm::perspective(70.f, mWidth / (float)mHeight, 0.1f, 1000.0f); //glm::mat4 camView = glm::translate(glm::vec3(0,0,-3.5)); //glm::mat4 WVP = camProjection * camView * mCube1World; // //CGparameter location = cgGetNamedParameter(mVertexShaderId, "matrices.WVP"); //cgSetMatrixParameterfc(location, glm::value_ptr(WVP)); // do 3D rendering on the back buffer here //UINT stride = sizeof(VERTEX); //UINT offset = 0; //mDeviceContext->Draw(4, 0); unsigned int strides[2] = { sizeof(glm::vec3), sizeof(glm::vec4) }; unsigned int offsets[2] = { 0, 0 }; //dev->IASetVertexBuffers(0, 2, &pVBuffer, strides, offsets ); //mDeviceContext->IASetInputLayout(mVboLayout); // this needs to be done to really set it //mDeviceContext->IASetVertexBuffers(0, 2, mVbo, strides, offsets); //mDeviceContext->IASetIndexBuffer( mIbo, DXGI_FORMAT_R16_UINT, 0 ); //mDeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); //mDeviceContext->DrawIndexed(36, 0, 0); // GETTING A LOCATION CAN BE DONE WHEN A SHADER IS BOUND CGparameter location2 = cgGetNamedParameter(mVertexShaderId, "ambient"); cgD3D11UnbindProgram(mVertexShaderId); cgD3D11UnbindProgram(mFragmentShaderId); // We can only set the uniform if the shader is NOT BOUND! // In OpenGL we have to check that! // FOUND OUT: a location can be retrieved and set to a value when a shader is not bound! // BUT SETTING IT's VALUE CAN ONLY BE DONE WHEN IT's UNBOUND! cgSetParameter4fv(location2, glm::value_ptr(glm::vec4(0.5,mCubeRotation,1.0,1.0))); checkForCgError("could not set uniform color", mCgContext, false); bindShader(mVertexShaderId, mFragmentShaderId); mDeviceContext->IASetInputLayout(mVboLayout); // this needs to be done to really set it mDeviceContext->IASetVertexBuffers(0, 2, mPlaneVbo, strides, offsets); mDeviceContext->IASetIndexBuffer( mPlaneIbo, DXGI_FORMAT_R32_UINT, 0 ); mDeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); mDeviceContext->DrawIndexed(6, 0, 0); }
void ShaderParameterCg::Set(glm::detail::tvec4<float> const& vector) { cgSetParameter4fv(this->_param, (float*)&vector); }
// // SetFloatVec4 // void CCgUniform::SetFloatVec4( const Vec4<GLfloat>& v ) { cgSetParameter4fv( m_Parameter, &v[ 0 ] ); }