Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.83 KB | None | 0 0
  1. void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels){
  2.     texture_unit* tex_unit = &texture_units[server_texture_unit];
  3.     int texture2d_idx = tex_unit->tex_id;
  4.     texture* target_texture = &tex_unit->textures[texture2d_idx];
  5.     SceGxmTextureFormat tex_format = sceGxmTextureGetFormat(&target_texture->gxm_tex);
  6.     uint8_t bpp = tex_format_to_bytespp(tex_format);
  7.     uint32_t stride = ((sceGxmTextureGetWidth(&target_texture->gxm_tex) + 7) & ~7) * bpp;
  8.     uint8_t* ptr = (uint8_t*)sceGxmTextureGetData(&target_texture->gxm_tex) + xoffset * bpp + yoffset * stride * bpp;
  9.     uint8_t* ptr_line = ptr;
  10.     int i,j;
  11.     switch (target){
  12.         case GL_TEXTURE_2D:
  13.             switch (format){
  14.                 case GL_RGB:
  15.                     switch (type){
  16.                         case GL_UNSIGNED_BYTE:
  17.                             switch (tex_format){
  18.                                 case SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR:
  19.                                     for (i=0;i<height;i++){
  20.                                         for (j=0;j<width;j++){
  21.                                             memcpy(ptr, pixels, 3);
  22.                                             ptr[3] = 0xFF;
  23.                                             pixels += 3;
  24.                                             ptr += bpp;
  25.                                         }
  26.                                         ptr = ptr_line + stride;
  27.                                         ptr_line = ptr;
  28.                                     }
  29.                                     break;
  30.                                 default:
  31.                                     error = GL_INVALID_ENUM;
  32.                                     break;
  33.                             }  
  34.                         default:
  35.                             error = GL_INVALID_ENUM;
  36.                             break;
  37.                     }
  38.                     break;
  39.                 case GL_RGBA:
  40.                     switch (type){
  41.                         case GL_UNSIGNED_BYTE:
  42.                             switch (tex_format){
  43.                                 case SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR:
  44.                                     for (i=0;i<height;i++){
  45.                                         memcpy(ptr, pixels, width * bpp);
  46.                                         pixels += width * bpp;
  47.                                         ptr += stride;
  48.                                     }
  49.                                     break;
  50.                                 default:
  51.                                     error = GL_INVALID_ENUM;
  52.                                     break;
  53.                             }  
  54.                         default:
  55.                             error = GL_INVALID_ENUM;
  56.                             break;
  57.                     }
  58.                     break;
  59.                 case GL_LUMINANCE:
  60.                     switch (type){
  61.                         case GL_UNSIGNED_BYTE:
  62.                             switch (tex_format){
  63.                                 case SCE_GXM_TEXTURE_FORMAT_L8:
  64.                                     for (i=0;i<height;i++){
  65.                                         memcpy(ptr, pixels, width * bpp);
  66.                                         pixels += width * bpp;
  67.                                         ptr += stride;
  68.                                     }
  69.                                     break;
  70.                                 case SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR:
  71.                                     for (i=0;i<height;i++){
  72.                                         for (j=0;j<width;j++){
  73.                                             ptr[0] = ((uint8_t*)pixels)[0];
  74.                                             ptr[1] = ((uint8_t*)pixels)[0];
  75.                                             ptr[2] = ((uint8_t*)pixels)[0];
  76.                                             ptr[3] = 0xFF;
  77.                                             pixels += 1;
  78.                                             ptr += bpp;
  79.                                         }
  80.                                         ptr = ptr_line + stride;
  81.                                         ptr_line = ptr;
  82.                                     }
  83.                                     break;
  84.                                 default:
  85.                                     error = GL_INVALID_ENUM;
  86.                                     break;
  87.                             }  
  88.                         default:
  89.                             error = GL_INVALID_ENUM;
  90.                             break;
  91.                     }
  92.                     break;
  93.                 default:
  94.                     error = GL_INVALID_ENUM;
  95.                     break;
  96.             }
  97.             break;
  98.         default:
  99.             error = GL_INVALID_ENUM;
  100.             break; 
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement