void CRender3D::SetDefaultStates() { uint vp_x, vp_y, vp_width, vp_height; _pCoreRenderer->GetViewport(vp_x, vp_y, vp_width, vp_height); _stCurState.fFovAngle = 60.f; _stCurState.fZNear = 0.25f; _stCurState.fZFar = 1000.f; _SetPerspectiveMatrix(vp_width, vp_height); _stCurState.matrixStack.Clear(MatrixIdentity()); _pCoreRenderer->SetMatrix(_stCurState.matrixStack.Top()); _stCurState.isLightingEnabled = false; _stCurState.stGlobalAmbient = TColor4(50, 50, 50, 255); _stCurState.stFogDesc.bEnabled = false; _stCurState.stFogDesc.stColor = ColorGray(); _stCurState.stFogDesc.fStart = 500.f; _stCurState.stFogDesc.fEnd = 1000.f; if (_pFFP) { _pFFP->ToggleGlobalLighting(_stCurState.isLightingEnabled); _pFFP->SetGloablAmbientLight(_stCurState.stGlobalAmbient); _pFFP->SetFogEnabled(_stCurState.stFogDesc.bEnabled); _pFFP->SetFogColor(_stCurState.stFogDesc.stColor); _pFFP->ConfigureFog(_stCurState.stFogDesc.fStart, _stCurState.stFogDesc.fEnd); } _stCurState.eBlendingMode = BE_NORMAL; _stCurState.stBlendStateDesc = TBlendStateDesc(); _pCoreRenderer->SetBlendState(_stCurState.stBlendStateDesc); _stCurState.stDepthStencilDesc = TDepthStencilDesc(); _pCoreRenderer->SetDepthStencilState(_stCurState.stDepthStencilDesc); _stCurState.stRasterStateDesc = TRasterizerStateDesc(); _stCurState.stRasterStateDesc.eCullMode = PCM_BACK; _pCoreRenderer->SetRasterizerState(_stCurState.stRasterStateDesc); _stCurState.stColor = ColorWhite(); _pCoreRenderer->SetColor(_stCurState.stColor); _stCurState.pCurMat = INVALID_MATERIAL; Core()->pRender()->Unbind(EOT_UNKNOWN); }
CFixedFunctionPipeline::CFixedFunctionPipeline() : _c_fAttenuationFactor(1.75f), _bStateFilterEnabled(true) { glGetIntegerv(GL_MAX_LIGHTS, &_iMaxLights); _pLights = new TLight[_iMaxLights]; glFogi(GL_FOG_MODE, GL_LINEAR); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, TColor4(50, 50, 50, 255)); for (int i = 0; i < _iMaxLights; ++i) { _pLights[i].type = LT_DIRECTIONAL; _pLights[i].mview = MatrixIdentity(); glDisable(GL_LIGHT0 + i); glLightfv(GL_LIGHT0 + i, GL_DIFFUSE, ColorWhite()); glLightfv(GL_LIGHT0 + i, GL_SPECULAR, ColorWhite()); glLightf(GL_LIGHT0 + i, GL_CONSTANT_ATTENUATION, 1.f); glLightf(GL_LIGHT0 + i, GL_LINEAR_ATTENUATION, _c_fAttenuationFactor / 100.f); glLightf(GL_LIGHT0 + i, GL_SPOT_CUTOFF, 180.f); const GLfloat pos[] = {0.f, 0.f, 1.f, 0.f}; glLightfv(GL_LIGHT0 + i, GL_POSITION, pos); } }
CRender::CRender(uint uiInstIdx): CInstancedObj(uiInstIdx), _fFovAngle(60.f), _fZNear(0.25f), _fZFar(1000.f) { _pCoreRenderer = Core()->pCoreRenderer(); bool b_supported; std::string flist = "Core Renderer supported features\n\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_BUILTIN_FSCREEN_MODE, b_supported); flist += std::string("Hardware FScreen: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_BUILTIN_STATE_FILTER, b_supported); flist += std::string("Builtin State Filter: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_MULTISAMPLING, b_supported); flist += std::string("Multisampling: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRDF_VSYNC, b_supported); flist += std::string("VSync: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRDF_PROGRAMMABLE_PIPELINE, b_supported); flist += std::string("Programmable pipeline: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_BGRA_DATA_FORMAT, b_supported); flist += std::string("BGRA textures: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_TEXTURE_COMPRESSION, b_supported); flist += std::string("Texture compression: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_NON_POWER_OF_TWO_TEXTURES, b_supported); flist += std::string("Non power of two textures: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_DEPTH_TEXTURES, b_supported); flist += std::string("Depth textures: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_TEXTURE_ANISOTROPY, b_supported); flist += std::string("Texture anisotropy: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_TEXTURE_MIPMAP_GENERATION, b_supported); flist += std::string("Hardware mipmap generation: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRDF_TEXTURE_MIRRORED_REPEAT, b_supported); flist += std::string("Texture mirrored repeat: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRDF_TEXTURE_MIRROR_CLAMP, b_supported); flist += std::string("Texture mirror clamp: ") + (b_supported ? "Yes" : "No") + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRDF_GEOMETRY_BUFFER, b_supported); flist += std::string("Geometry buffer: ") + (b_supported ? "Yes" : "No") + "\n\t"; LOG(flist, LT_INFO); std::string mlist = "Core Renderer device metrics\n\n\t"; _pCoreRenderer->GetDeviceMetric(CRMT_MAX_TEXTURE_RESOLUTION, _iMaxTexResolution); mlist += "Maximum texture resolution: " + IntToStr(_iMaxTexResolution) + "X" + IntToStr(_iMaxTexResolution) + "\n\t"; _pCoreRenderer->IsFeatureSupported(CRSF_TEXTURE_ANISOTROPY, b_supported); if (b_supported) { _pCoreRenderer->GetDeviceMetric(CRMT_MAX_ANISOTROPY_LEVEL, _iMaxAnisotropy); mlist += "Maximum anisotropy level: " + IntToStr(_iMaxAnisotropy) + "X" + "\n\t"; } _pCoreRenderer->GetDeviceMetric(CRMT_MAX_LIGHTS_PER_PASS, _iMaxLight); _pCoreRenderer->GetDeviceMetric(CRMT_MAX_TEXTURE_LAYERS, _iMaxTexUnits); mlist += "Maximum multitexturing layer: " + IntToStr(_iMaxTexUnits) + "\n\t"; LOG(mlist, LT_INFO); SetClearColor(TColor4(0x64646400)); _pRender2D = new CRender2D(InstIdx()); LOG("Render subsystem initialized.", LT_INFO); }