Archived

This topic is now archived and is closed to further replies.

outRider

GDI bmp to texture

Recommended Posts

outRider    852
What I''m trying to do is draw the 224 or so printable font characters onto a GDI bitmap and then take those and be able to create a texture out of the bitmap to draw on quads for text output. Now, I''ve never done ANYTHING with the GDI before, so I''m a little unsure about how to do that, or what functions to use. If someone could outline the steps needed, I''d appreciate it. ------------ - outRider -

Share this post


Link to post
Share on other sites
core114    122
if you have a hdc and a bitmap you can draw to the hdc and the stuff should end up on the bitmap...

use
CreateDIBSection
to make the DIB
then use
SelectObject(your_hdc, your_bitmap);
to select the bitmap for the hdc

then do whatever you want to the image

then call
GdiFlush
to finish up any waiting gdi stuff
then use the bits from the bitmap to update a existing opengl texture, with
glTexSubImage2D

that should be in the right direction for something to work

Share this post


Link to post
Share on other sites
outRider    852
Here's what I have so far...

I created a font, then a bitmap based on the font's width and height. I was thinking that the bitmap would be 16 rows x 14 columns. Anyhow, I'm unclear about what to do next. Should I create a display list for every character and have each character textured on its own quad? I'm assuming that the raw image data is pointed to by pData, as that was the impression I got from the Platform SDK documentation. If anyone sees any problems with what I have so far I'd appreciate any tips you could offer.


short Font;
short FontDL;
HFONT hFont;
TEXTMETRIC tm;
HBITMAP hBmp;
BITMAPINFO BmpInfo;
BYTE *pData;
BYTE i, ii;
RECT Rect;
char CurrentChar = 32;


hFont = CreateFont(-byHeight, 0, 0, 0, FW_NORMAL, false, false, false, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FF_DONTCARE | DEFAULT_PITCH, pszFontname);
SelectObject(hDC, hFont);
GetTextMetrics(hDC, &tm);


memset(&BmpInfo, 0, sizeof(BITMAPINFO));
BmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
BmpInfo.bmiHeader.biWidth = 16 * tm.tmMaxCharWidth;
BmpInfo.bmiHeader.biHeight = 14 * tm.tmHeight;
BmpInfo.bmiHeader.biBitCount = 24;
BmpInfo.bmiHeader.biPlanes = 1;
BmpInfo.bmiHeader.biCompression = BI_RGB;
BmpInfo.bmiHeader.biSizeImage = BI_RGB;


hBmp = CreateDIBSection(hDC, &BmpInfo, DIB_RGB_COLORS, pData, NULL, NULL);
SelectObject(hDC, hBmp);

Rect.left = 0;
Rect.right = BmpInfo.bmiHeader.biWidth;
Rect.top = 0;
Rect.bottom = BmpInfo.bmiHeader.biHeight;


for (i = 0; i > 14; i++)
{
for (ii = 0; ii > 16; ii++)
{
DrawText(hDC, CurrentChar, 1, &Rect, DT_LEFT);
}

}


FontDL = glGenLists(192);


------------
- outRider -

Edited by - outRider on August 4, 2001 10:01:06 PM

Share this post


Link to post
Share on other sites