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);
	}
}
Example #2
0
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);
	}

}
Example #3
0
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);
    }
}
Example #7
0
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();
}
Example #14
0
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);
	}
}
Example #15
0
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);
	}
}
Example #16
0
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);
	}
}
Example #17
0
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);
	}
}
Example #18
0
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;
}