Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels){
- texture_unit* tex_unit = &texture_units[server_texture_unit];
- int texture2d_idx = tex_unit->tex_id;
- texture* target_texture = &tex_unit->textures[texture2d_idx];
- SceGxmTextureFormat tex_format = sceGxmTextureGetFormat(&target_texture->gxm_tex);
- uint8_t bpp = tex_format_to_bytespp(tex_format);
- uint32_t stride = ((sceGxmTextureGetWidth(&target_texture->gxm_tex) + 7) & ~7) * bpp;
- uint8_t* ptr = (uint8_t*)sceGxmTextureGetData(&target_texture->gxm_tex) + xoffset * bpp + yoffset * stride * bpp;
- uint8_t* ptr_line = ptr;
- int i,j;
- switch (target){
- case GL_TEXTURE_2D:
- switch (format){
- case GL_RGB:
- switch (type){
- case GL_UNSIGNED_BYTE:
- switch (tex_format){
- case SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR:
- for (i=0;i<height;i++){
- for (j=0;j<width;j++){
- memcpy(ptr, pixels, 3);
- ptr[3] = 0xFF;
- pixels += 3;
- ptr += bpp;
- }
- ptr = ptr_line + stride;
- ptr_line = ptr;
- }
- break;
- default:
- error = GL_INVALID_ENUM;
- break;
- }
- default:
- error = GL_INVALID_ENUM;
- break;
- }
- break;
- case GL_RGBA:
- switch (type){
- case GL_UNSIGNED_BYTE:
- switch (tex_format){
- case SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR:
- for (i=0;i<height;i++){
- memcpy(ptr, pixels, width * bpp);
- pixels += width * bpp;
- ptr += stride;
- }
- break;
- default:
- error = GL_INVALID_ENUM;
- break;
- }
- default:
- error = GL_INVALID_ENUM;
- break;
- }
- break;
- case GL_LUMINANCE:
- switch (type){
- case GL_UNSIGNED_BYTE:
- switch (tex_format){
- case SCE_GXM_TEXTURE_FORMAT_L8:
- for (i=0;i<height;i++){
- memcpy(ptr, pixels, width * bpp);
- pixels += width * bpp;
- ptr += stride;
- }
- break;
- case SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR:
- for (i=0;i<height;i++){
- for (j=0;j<width;j++){
- ptr[0] = ((uint8_t*)pixels)[0];
- ptr[1] = ((uint8_t*)pixels)[0];
- ptr[2] = ((uint8_t*)pixels)[0];
- ptr[3] = 0xFF;
- pixels += 1;
- ptr += bpp;
- }
- ptr = ptr_line + stride;
- ptr_line = ptr;
- }
- break;
- default:
- error = GL_INVALID_ENUM;
- break;
- }
- default:
- error = GL_INVALID_ENUM;
- break;
- }
- break;
- default:
- error = GL_INVALID_ENUM;
- break;
- }
- break;
- default:
- error = GL_INVALID_ENUM;
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement