void CSceneManager::RenderScene(CCamera *camera, CViewPort *view) { if(!camera || !view) return; for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CSceneManagerListener * lis = dynamic_cast<CSceneManagerListener *>(GetListener(i)); lis->SceneRenderBeginListener(this); } mRenderedFaces = 0; mRenderedBatches = 0; mCurCamera = camera; mCurView = view; RenderSceneImpl(); RenderСompoundObjects(); for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CSceneManagerListener * lis = dynamic_cast<CSceneManagerListener *>(GetListener(i)); lis->SceneRenderEndListener(this); } }
void CTexture::ApplyTexture() { if(!isReady) return; glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(mSOffset, mTOffset, 0.0f); glScalef(mSTiling, mTTiling, 1.0f); glRotatef(mAngle, 0, 0, 1); glEnable(CHardwarePixelBuffer::TextureTarget(mType)); glBindTexture(CHardwarePixelBuffer::TextureTarget(mType), mTexture); //glTexParameteri(CHardwarePixelBuffer::TextureTarget(mType), GL_TEXTURE_MIN_FILTER, mMinFilter); //glTexParameteri(CHardwarePixelBuffer::TextureTarget(mType), GL_TEXTURE_MAG_FILTER, mMagFilter); glTexParameteri(CHardwarePixelBuffer::TextureTarget(mType), GL_TEXTURE_WRAP_S, mWrapTypeS); glTexParameteri(CHardwarePixelBuffer::TextureTarget(mType), GL_TEXTURE_WRAP_T, mWrapTypeT); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mEnvType); for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CTextureListener * lis = dynamic_cast<CTextureListener *>(GetListener(i)); lis->ApplyTextureListener(this); } }
void CFreeFont::BuildFont() { // Загрузим шрифт из файла. Если файла шрифта не существует или шрифт битый, // то программа может умереть. if (FT_New_Face(library, ttffile.c_str(), 0, &face)) throw NOVA_EXP("CFreeFont::BuildFont - Loading free font failed \ (there is probably a problem with your font file)", BAD_OPERATION); // По некоторым причинам FreeType измеряет размер шрифта в терминах 1/64 пикселя. // Таким образом, для того чтобы сделать шрифт выстой h пикселей, мы запрашиваем размер h*64. // (h << 6 тоже самое что и h*64) FT_Set_Char_Size(face, height << 6, height << 6, 96, 96); slot = face->glyph; letters_map.clear(); for(nUInt16 ch = base_plane_begin; ch <= base_plane_end; ++ch) MakeLetter(ch); for(nUInt16 ch = rus_begin; ch <= rus_end; ++ch) MakeLetter(ch); // Уничтожим шрифт. FT_Done_Face(face); isReady = true; for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CFontListener * lis = dynamic_cast<CFontListener *>(GetListener(i)); lis->BuildFontListener(this); } }
void CRenderableObject::PostRenderAction() { for(nova::uint i = 0; i < GetListenersCount(); i++) { CRenderableObjectListener * lis = dynamic_cast<CRenderableObjectListener *>(GetListener(i)); lis->PostRenderActionListener(this); } }
void CRenderTarget::PostUpdateAction() { for(nova::uint i = 0; i < GetListenersCount(); i++) { CRenderTargetListener * lis = dynamic_cast<CRenderTargetListener *>(GetListener(i)); lis->PostRenderActionEvent(this); } }
CRenderTarget::~CRenderTarget() { //ResetStats(); for(nova::uint i = 0; i < GetListenersCount(); i++) { CRenderTargetListener * lis = dynamic_cast<CRenderTargetListener *>(GetListener(i)); lis->DestroyActionListener(this); } }
void CTexture::SetImageList(const TImageList & list) { mList = list; for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CTextureListener * lis = dynamic_cast<CTextureListener *>(GetListener(i)); lis->CreateTextureListener(this); } }
void CSceneNode::PrepareNode(void) { for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CSceneNodeListener * lis = dynamic_cast<CSceneNodeListener *>(GetListener(i)); lis->PrepareNodeListener(this); } PrepareNodeImpl(); }
void CSceneManager::BuildScene(void) { for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CSceneManagerListener * lis = dynamic_cast<CSceneManagerListener *>(GetListener(i)); lis->BuildSceneListener(this); } BuildSceneImpl(); }
void CSceneNode::ReleaseNode(void) { for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CSceneNodeListener * lis = dynamic_cast<CSceneNodeListener *>(GetListener(i)); lis->ReleaseNodeListener(this); } InValidateNode(); }
void CSceneManager::PrepareSceneFrame(void) { for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CSceneManagerListener * lis = dynamic_cast<CSceneManagerListener *>(GetListener(i)); lis->PrepareSceneFrameListener(this); } PrepareSceneFrameImpl(); }
void CSceneNode::InValidateNode(void) { for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CSceneNodeListener * lis = dynamic_cast<CSceneNodeListener *>(GetListener(i)); lis->InValidateNodeListener(this); } InValidateNodeImpl(); isValidated = false; }
void CSceneManager::DestroyScene(void) { for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CSceneManagerListener * lis = dynamic_cast<CSceneManagerListener *>(GetListener(i)); lis->DestroySceneListener(this); } DestroySceneNode(GetRootElement()); mSceneTree.FreeAll(); }
void CMeshBox::CalculateNormals(void/* Simple method */) { if(mMeshDef.nMeshInfoList.size() == 0) return ; typedef stl< stl<nInt32>::vector >::vector t_expl; t_expl expl; TNormal3d normal; mMeshDef.nNormalList.clear(); expl.resize(mMeshDef.nVertexList.size()); for(nova::nUInt32 i = 0; i < mMeshDef.nMeshInfoList.size(); ++i) { expl[mMeshDef.nIndexList[i].a].push_back(i); expl[mMeshDef.nIndexList[i].b].push_back(i); expl[mMeshDef.nIndexList[i].c].push_back(i); } for (nova::nUInt32 i = 0; i < mMeshDef.nVertexList.size(); ++i) { memset(&normal, 0, sizeof(TNormal3d)); nova::nUInt32 t = expl[i].size(); for (nova::nUInt32 k = 0; k < t; ++k) { normal.x += mMeshDef.nMeshInfoList[expl[i][k]].nFaceNormal.x; normal.y += mMeshDef.nMeshInfoList[expl[i][k]].nFaceNormal.y; normal.z += mMeshDef.nMeshInfoList[expl[i][k]].nFaceNormal.z; } Vector3f vec(&(normal.x)); vec.Normalize(); normal.x = vec.X(); normal.y = vec.Y(); normal.z = vec.Z(); mMeshDef.nNormalList.push_back(normal); } for(nova::nUInt32 i = 0; i < expl.size(); ++i) expl[i].clear(); expl.clear(); for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CMeshBoxListener * lis = dynamic_cast<CMeshBoxListener *>(GetListener(i)); lis->CalculateNormalsListener(this); } }
void CMaterial::ApplyMaterial(void) { //glPushAttrib(GL_LIGHTING_BIT); glEnable(GL_COLOR_MATERIAL); if(mTransparency > 0.0f) { CRenderSystem::GetSingelton().SetBlend(true); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glColor4f(1.0f, 1.0f, 1.0f, mTransparency); } else { glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } if(!mTexMapPtr.IsNull()) { if(mTexMapPtr->GetPixelFormat() == CImageFormats::NF_ALPHA || mTexMapPtr->GetPixelFormat() == CImageFormats::NF_BGRA || mTexMapPtr->GetPixelFormat() == CImageFormats::NF_LUMINANCE_ALPHA || mTexMapPtr->GetPixelFormat() == CImageFormats::NF_RGBA) CRenderSystem::GetSingelton().SetBlend(true); mTexMapPtr->ApplyTexture(); } else { glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glColor4f(mDiffuseColor.R(), mDiffuseColor.G(), mDiffuseColor.B(), mTransparency); } glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT); glColor3fv(mAmbientColor); glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); glColor3fv(mSpecularColor); for(nova::uint i = 0; i < GetListenersCount(); i++) { CMaterialListener * lis = dynamic_cast<CMaterialListener *>(GetListener(i)); lis->ApplyMaterialListener(this); } }
void CFreeFont::SetFontParam(FT_Library library, nova::nUInt32 height, const nstring & ttffile, nova::nUInt32 coord_grid) { this->height = height; this->ttffile = ttffile; this->coord_grid = coord_grid; if(!library) throw NOVA_EXP("CFreeFont::CreateFont - FreeFont library object is bad", MEM_ERROR); this->library = library; for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CFontListener * lis = dynamic_cast<CFontListener *>(GetListener(i)); lis->CreateFontListener(this); } }
void CTexture::AddSubTexture(CImagePtr & image, nova::nUInt32 level, nInt32 face, nova::nUInt32 xoff, nova::nUInt32 yoff, nova::nUInt32 zoff) { if(!isReady) throw NOVA_EXP("CTexture::CreateTexture - resource not created!", BAD_OPERATION); CTextureSurfaceListPtr plane = GetSurfaceList(face); CHardwarePixelBufferPtr surface = plane->GetSurface(level); CMemoryBuffer lock = surface->Lock(xoff, yoff, zoff, image->GetWidth(), image->GetHeight(), image->GetDepth(), HWB_DYNAMIC); image->GetBits().CopyTo(lock, image->GetBits().GetBufferSize(), 0); surface->Unlock(lock); for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CTextureListener * lis = dynamic_cast<CTextureListener *>(GetListener(i)); lis->AddSubTextureListener(this); } }
CBoundingBox CMeshBox::GenerateBoundingBox(void) { CBoundingBox testbox; nova::nReal xmax = mMeshDef.nVertexList[0].x, xmin = mMeshDef.nVertexList[0].x, ymax = mMeshDef.nVertexList[0].y, ymin = mMeshDef.nVertexList[0].y, zmax = mMeshDef.nVertexList[0].z, zmin = mMeshDef.nVertexList[0].z; TVertexes::iterator it = mMeshDef.nVertexList.begin()+1; for(; it != mMeshDef.nVertexList.end(); ++it) { xmax = std::max((*it).x, xmax); xmin = std::min((*it).x, xmin); ymax = std::max((*it).y, ymax); ymin = std::min((*it).y, ymin); zmax = std::max((*it).z, zmax); zmin = std::min((*it).z, zmin); } nova::Vector3f maxpoint(xmax, ymax, zmax); nova::Vector3f minpoint(xmin, ymin, zmin); testbox.CalcSides(minpoint, maxpoint); for(nova::nUInt32 i = 0; i < GetListenersCount(); i++) { CMeshBoxListener * lis = dynamic_cast<CMeshBoxListener *>(GetListener(i)); lis->GenerateBoundingBoxListener(this); } return testbox; }