| 160 | } |
| 161 | |
| 162 | void TextureMapInit(XnTextureMap* pTex, int nSizeX, int nSizeY, unsigned int nBytesPerPixel, int nCurX, int nCurY) |
| 163 | { |
| 164 | // check if something changed |
| 165 | if (pTex->bInitialized && pTex->OrigSize.X == nSizeX && pTex->OrigSize.Y == nSizeY) |
| 166 | { |
| 167 | if (pTex->CurSize.X != nCurX || pTex->CurSize.Y != nCurY) |
| 168 | { |
| 169 | // clear map |
| 170 | xnOSMemSet(pTex->pMap, 0, pTex->Size.X * pTex->Size.Y * pTex->nBytesPerPixel); |
| 171 | |
| 172 | // update |
| 173 | pTex->CurSize.X = nCurX; |
| 174 | pTex->CurSize.Y = nCurY; |
| 175 | return; |
| 176 | } |
| 177 | } |
| 178 | |
| 179 | // free memory if it was allocated |
| 180 | if (pTex->pMap != NULL) |
| 181 | delete pTex->pMap; |
| 182 | |
| 183 | // update it all |
| 184 | pTex->OrigSize.X = nSizeX; |
| 185 | pTex->OrigSize.Y = nSizeY; |
| 186 | pTex->Size.X = GetPowerOfTwo(nSizeX); |
| 187 | pTex->Size.Y = GetPowerOfTwo(nSizeY); |
| 188 | pTex->nBytesPerPixel = nBytesPerPixel; |
| 189 | pTex->CurSize.X = nCurX; |
| 190 | pTex->CurSize.Y = nCurY; |
| 191 | pTex->pMap = new unsigned char[pTex->Size.X * pTex->Size.Y * nBytesPerPixel]; |
| 192 | xnOSMemSet(pTex->pMap, 0, pTex->Size.X * pTex->Size.Y * nBytesPerPixel); |
| 193 | |
| 194 | if (!pTex->bInitialized) |
| 195 | { |
| 196 | glGenTextures(1, &pTex->nID); |
| 197 | glBindTexture(GL_TEXTURE_2D, pTex->nID); |
| 198 | |
| 199 | switch (pTex->nBytesPerPixel) |
| 200 | { |
| 201 | case 3: |
| 202 | pTex->nFormat = GL_RGB; |
| 203 | break; |
| 204 | case 4: |
| 205 | pTex->nFormat = GL_RGBA; |
| 206 | break; |
| 207 | } |
| 208 | |
| 209 | glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); |
| 210 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); |
| 211 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
| 212 | |
| 213 | pTex->bInitialized = TRUE; |
| 214 | } |
| 215 | } |
| 216 | |
| 217 | inline unsigned char* TextureMapGetLine(XnTextureMap* pTex, unsigned int nLine) |
| 218 | { |
no test coverage detected