Пример #1
0
void TextureManager::DebugInfoRender(const float &fRatio, const PosQuat &pq)
{
	Texture *pCurrent = 0;

	//render currently selected texture for debug display
	if (m_dwSelectedIndex < m_vTextures.size())
	{
		pCurrent = m_vTextures.at(m_dwSelectedIndex);
	}

	if (!pCurrent)
	{
		return;
	}

	glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

	GLboolean bLightingWasOn = glIsEnabled(GL_LIGHTING);
	if (bLightingWasOn)
	{ //turn off lighting
		glDisable(GL_LIGHTING);
	}
	
	GLboolean bTextureWasOn = glIsEnabled(GL_TEXTURE_2D);
	if (!bTextureWasOn)
	{ //turn textures on if it wasn't already on
		glEnable(GL_TEXTURE_2D);
	}

	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
	glBindTexture(GL_TEXTURE_2D, pCurrent->GetTexture());

	glMultMatrixf(pq.quat.ToMatrix().m);

	float fScale = 0.33f;
	float fBorder = fScale * 1.05f;
	float fBorderSize = fBorder - fScale;

	glBegin(GL_QUADS);
	glTexCoord2f(0.0f, 0.0f);  glVertex3f(-fScale, -fScale, 0.0f);
	glTexCoord2f(0.0f, 1.0f);  glVertex3f(-fScale, fScale, 0.0f);
	glTexCoord2f(1.0f, 1.0f);  glVertex3f(fScale, fScale, 0.0f);
	glTexCoord2f(1.0f, 0.0f);  glVertex3f(fScale, -fScale, 0.0f);
	glEnd();

	glDisable(GL_TEXTURE_2D);

	glBegin(GL_QUADS);
	glColor3f(1.0f, 0.0f, 1.0f);
	glNormal3f(0.0f, 0.0f, 1.0f);
	glVertex3f(-fBorder, -fBorder, 0.0f);
	glVertex3f(-fBorder, fBorder, 0.0f);
	glVertex3f(-fBorder + fBorderSize, fBorder, 0.0f);
	glVertex3f(-fBorder + fBorderSize, -fBorder, 0.0f);

	glVertex3f(fBorder, -fBorder, 0.0f);
	glVertex3f(fBorder, fBorder, 0.0f);
	glVertex3f(fBorder - fBorderSize, fBorder, 0.0f);
	glVertex3f(fBorder - fBorderSize, -fBorder, 0.0f);

	glVertex3f(-fBorder, -fBorder, 0.0f);
	glVertex3f(-fBorder, -fBorder + fBorderSize, 0.0f);
	glVertex3f(fBorder, -fBorder + fBorderSize, 0.0f);
	glVertex3f(fBorder, -fBorder, 0.0f);

	glVertex3f(-fBorder, fBorder, 0.0f);
	glVertex3f(-fBorder, fBorder - fBorderSize, 0.0f);
	glVertex3f(fBorder, fBorder - fBorderSize, 0.0f);
	glVertex3f(fBorder, fBorder, 0.0f);

	glEnd();
	glColor3f(1.0f, 1.0f, 1.0f);

	//reset matrices so text is always in the correct spot
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60.0, fRatio, 0.1, 50.0); //update this so we dont get crappy distortion
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	gluLookAt(0.0, 0.0, 1.75, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

	size_t size = 50 + strlen(pCurrent->GetName());
	char *pDetails = (char *)malloc(sizeof(char) * size);
	memset(pDetails, 0, size);
	sprintf_s(pDetails, size, "%dx%d, %u bytes, %s", pCurrent->GetSizeX(), pCurrent->GetSizeY(), pCurrent->GetSizeInBytes(), pCurrent->GetName());

	glRasterPos2f(-fRatio, 0.97f);
	for (const char *c = pDetails; *c != '\0'; c++)
	{
		glutBitmapCharacter(GLUT_BITMAP_8_BY_13, *c);
	}
	free(pDetails);

	this->RenderHelpText(fRatio);

	glEnable(GL_TEXTURE_2D);

	if (!bTextureWasOn)
	{ //disable textures if it wasn't on initially
		glDisable(GL_TEXTURE_2D);
	}

	if (bLightingWasOn)
	{ //if it was on, turn it back on!
		glEnable(GL_LIGHTING);
	}
}