1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
HRESULT LoadTextureFromBMP(char *pFilename,int ResX,int ResY,GLuint *pTex)
{
HBITMAP Bmp;
HDC BmpDC;
Bmp=(HBITMAP)LoadImage(GetModuleHandle(NULL), pFilename, 0,ResX, ResY, LR_LOADFROMFILE);
if (!Bmp) return E_FAIL;
BmpDC=CreateCompatibleDC(GetDC(HWND_DESKTOP));
if (!BmpDC)
{
DeleteObject(Bmp);
return E_FAIL;
}
SelectObject(BmpDC, Bmp);
struct color
{
float r,g,b;
color() {}
color(float _r,float _g,float _b):r(_r),g(_g),b(_b) {}
~color() {}
};
color *pData=new color[ResX*ResY];
for (int x=0; x<ResX; x++)
for (int y=0; y<ResY; y++)
{
COLORREF ref=GetPixel(BmpDC,x,y);
pData[y * ResY + x]=color((float)(GetRValue(ref))/255.0f,
(float)(GetGValue(ref))/255.0f,
(float)(GetBValue(ref))/255.0f);
}
DeleteObject(Bmp);
DeleteDC(BmpDC);
glGenTextures(1,pTex);
glBindTexture(GL_TEXTURE_2D, *pTex);
glTexImage2D(GL_TEXTURE_2D, 0, 3, ResX, ResY,
0, GL_RGB, GL_FLOAT, pData);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
delete[] pData;
return S_OK;
}
|