コード例 #1
0
static void drawText(float x, float y, const char *text, int align, unsigned int col)
{
	if (!g_ftex) return;
	if (!text) return;

	if (align == IMGUI_ALIGN_CENTER)
		x -= getTextLength(g_cdata, text)/2;
	else if (align == IMGUI_ALIGN_RIGHT)
		x -= getTextLength(g_cdata, text);

	glColor4ub(col&0xff, (col>>8)&0xff, (col>>16)&0xff, (col>>24)&0xff);

	glEnable(GL_TEXTURE_2D);

	// assume orthographic projection with units = screen pixels, origin at top left
	glBindTexture(GL_TEXTURE_2D, g_ftex);

	glBegin(GL_TRIANGLES);

	const float ox = x;

	while (*text)
	{
		int c = (unsigned char)*text;
		if (c == '\t')
		{
			for (int i = 0; i < 4; ++i)
			{
				if (x < g_tabStops[i]+ox)
				{
					x = g_tabStops[i]+ox;
					break;
				}
			}
		}
		else if (c >= 32 && c < 128)
		{
			stbtt_aligned_quad q;
			getBakedQuad(g_cdata, 512,512, c-32, &x,&y,&q);

			glTexCoord2f(q.s0, q.t0);
			glVertex2f(q.x0, q.y0);
			glTexCoord2f(q.s1, q.t1);
			glVertex2f(q.x1, q.y1);
			glTexCoord2f(q.s1, q.t0);
			glVertex2f(q.x1, q.y0);

			glTexCoord2f(q.s0, q.t0);
			glVertex2f(q.x0, q.y0);
			glTexCoord2f(q.s0, q.t1);
			glVertex2f(q.x0, q.y1);
			glTexCoord2f(q.s1, q.t1);
			glVertex2f(q.x1, q.y1);
		}
		++text;
	}

	glEnd();
	glDisable(GL_TEXTURE_2D);
}
コード例 #2
0
ファイル: RenderGL3.cpp プロジェクト: kdridi/box2d
void sRenderString(float x, float y, const char *text, TextAlign align, unsigned int col)
{
	if (!g_ftex) return;
	if (!text) return;

	if (align == TEXT_ALIGN_CENTER)
		x -= getTextLength(g_cdata, text) / 2;
	else if (align == TEXT_ALIGN_RIGHT)
		x -= getTextLength(g_cdata, text);

	float r = (float)(col & 0xff) / 255.f;
	float g = (float)((col >> 8) & 0xff) / 255.f;
	float b = (float)((col >> 16) & 0xff) / 255.f;
	float a = (float)((col >> 24) & 0xff) / 255.f;

	// assume orthographic projection with units = screen pixels, origin at top left
	glBindTexture(GL_TEXTURE_2D, g_ftex);

	const float ox = x;

	while (*text)
	{
		int c = (unsigned char)*text;
		if (c == '\t')
		{
			for (int i = 0; i < 4; ++i)
			{
				if (x < g_tabStops[i] + ox)
				{
					x = g_tabStops[i] + ox;
					break;
				}
			}
		}
		else if (c >= 32 && c < 128)
		{
			stbtt_aligned_quad q;
			getBakedQuad(g_cdata, 512, 512, c - 32, &x, &y, &q);

			float v[12] = {
				q.x0, q.y0,
				q.x1, q.y1,
				q.x1, q.y0,
				q.x0, q.y0,
				q.x0, q.y1,
				q.x1, q.y1,
			};
			float uv[12] = {
				q.s0, q.t0,
				q.s1, q.t1,
				q.s1, q.t0,
				q.s0, q.t0,
				q.s0, q.t1,
				q.s1, q.t1,
			};
			float c[24] = {
				r, g, b, a,
				r, g, b, a,
				r, g, b, a,
				r, g, b, a,
				r, g, b, a,
				r, g, b, a,
			};
			glBindVertexArray(g_vao);
			glBindBuffer(GL_ARRAY_BUFFER, g_vbos[0]);
			glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(float), v, GL_STATIC_DRAW);
			glBindBuffer(GL_ARRAY_BUFFER, g_vbos[1]);
			glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(float), uv, GL_STATIC_DRAW);
			glBindBuffer(GL_ARRAY_BUFFER, g_vbos[2]);
			glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(float), c, GL_STATIC_DRAW);
			glDrawArrays(GL_TRIANGLES, 0, 6);

		}
		++text;
	}

	//glEnd();        
	//glDisable(GL_TEXTURE_2D);
}