- tutorial3_bin.zip
- TetroGL
- 01 Digitall.ttf
- Block.png
- DevIL.dll
- HighScoreItems.png
- MainBackground.png
- MenuItems.png
- MenuTitle.png
- PlayBckgnd.png
- ProgressBar.png
- ScoresTitle.png
- TetroGL.exe
- Thumbs.db
- tutorial3_src.zip
- bin
- 01 Digitall.ttf
- Block.png
- DevIL.dll
- HighScoreItems.png
- MainBackground.png
- MenuItems.png
- MenuTitle.png
- PlayBckgnd.png
- ProgressBar.png
- ScoresTitle.png
- dependencies
- DevIL
- include
- IL
- lib
- DevIL.dll
- DevIL.exp
- DevIL.lib
- ILU.dll
- ILU.exp
- ILU.lib
- ILUT.dll
- ILUT.exp
- ILUT.lib
- src
- TetroGL.sln
- TetroGL.vcproj
|
#include "Image.h"
#include "Exception.h"
#include "TextureManager.h"
using namespace std;
CImage::CImage(const string& strFileName)
: m_pTexture(NULL), m_rectTextCoord()
{
// This line will throw an exception if the texture is not found.
m_pTexture = CTextureManager::GetInstance()->GetTexture(strFileName);
m_pTexture->AddReference();
// Set the texture coordinate to the full texture
m_rectTextCoord.m_Top = m_rectTextCoord.m_Left = 0;
m_rectTextCoord.m_Bottom = m_pTexture->GetHeight();
m_rectTextCoord.m_Right = m_pTexture->GetWidth();
}
CImage::CImage(const string& strFileName, const TRectanglei& textCoord)
: m_pTexture(NULL), m_rectTextCoord(textCoord)
{
// This line will throw an exception if the texture is not found.
m_pTexture = CTextureManager::GetInstance()->GetTexture(strFileName);
m_pTexture->AddReference();
}
TImagePtr CImage::CreateImage(const string& strFileName)
{
TImagePtr imgPtr(new CImage(strFileName));
return imgPtr;
}
TImagePtr CImage::CreateImage(const string& strFileName, const TRectanglei& textCoord)
{
TImagePtr imgPtr(new CImage(strFileName,textCoord));
return imgPtr;
}
CImage::~CImage()
{
if (m_pTexture)
m_pTexture->ReleaseReference();
}
void CImage::BlitImage(int iXOffset, int iYOffset) const
{
if (m_pTexture)
{
m_pTexture->Bind();
// Get the coordinates of the image in the texture, expressed
// as a value from 0 to 1.
float Top = ((float)m_rectTextCoord.m_Top)/m_pTexture->GetHeight();
float Bottom = ((float)m_rectTextCoord.m_Bottom)/m_pTexture->GetHeight();
float Left = ((float)m_rectTextCoord.m_Left)/m_pTexture->GetWidth();
float Right = ((float)m_rectTextCoord.m_Right)/m_pTexture->GetWidth();
// Draw the textured rectangle.
glBegin(GL_QUADS);
glTexCoord2f(Left,Top); glVertex3i(iXOffset,iYOffset,0);
glTexCoord2f(Left,Bottom); glVertex3i(iXOffset,iYOffset+m_rectTextCoord.GetHeight(),0);
glTexCoord2f(Right,Bottom); glVertex3i(iXOffset+m_rectTextCoord.GetWidth(),iYOffset+m_rectTextCoord.GetHeight(),0);
glTexCoord2f(Right,Top); glVertex3i(iXOffset+m_rectTextCoord.GetWidth(),iYOffset,0);
glEnd();
}
}
void CImage::BlitImagePart(int iXOffset,
int iYOffset,
const TRectanglei& part)
{
// Check if the part is completely in the image
assert(part.m_Top>=0);
assert(part.m_Bottom<=m_rectTextCoord.GetHeight());
assert(part.m_Left>=0);
assert(part.m_Right<=m_rectTextCoord.GetWidth());
if (m_pTexture)
{
m_pTexture->Bind();
TRectanglei newTextRect = part;
newTextRect.OffsetRect(m_rectTextCoord.m_Left,m_rectTextCoord.m_Top);
// Get the coordinates of the image in the texture, expressed
// as a value from 0 to 1.
float Top = ((float)newTextRect.m_Top)/m_pTexture->GetHeight();
float Bottom = ((float)newTextRect.m_Bottom)/m_pTexture->GetHeight();
float Left = ((float)newTextRect.m_Left)/m_pTexture->GetWidth();
float Right = ((float)newTextRect.m_Right)/m_pTexture->GetWidth();
// Draw the textured rectangle.
glBegin(GL_QUADS);
glTexCoord2f(Left,Top); glVertex3i(iXOffset,iYOffset,0);
glTexCoord2f(Left,Bottom); glVertex3i(iXOffset,iYOffset+newTextRect.GetHeight(),0);
glTexCoord2f(Right,Bottom); glVertex3i(iXOffset+newTextRect.GetWidth(),iYOffset+newTextRect.GetHeight(),0);
glTexCoord2f(Right,Top); glVertex3i(iXOffset+newTextRect.GetWidth(),iYOffset,0);
glEnd();
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I am a 29 years old guy and I live with my girlfriend in Hoegaarden, little city from Belgium well known for its white beer
.
I studied as an industrial engineer in electronics but I oriented myself more towards software development when I started to work.
Currently I am working in a research centre in mechatronica. I mainly develop in C++ but I also do a bit of Java.
When I have so spare time, I like to read (mainly fantasy) and play electric guitar.