Advertisement
Guest User

Untitled

a guest
Dec 16th, 2014
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.89 KB | None | 0 0
  1. #define PACK_LUMINANCE(COUNT, RGBA, DST, FORMAT, TYPE, CONVERT) \
  2. do { \
  3. int i; \
  4. int bits = sizeof(TYPE) * 8; \
  5. TYPE *luminance = (TYPE *) DST; \
  6. switch (FORMAT) { \
  7. case GL_LUMINANCE_INTEGER_EXT: \
  8. for (i = 0; i < COUNT; i++) { \
  9. luminance[i] = \
  10. CONVERT(RGBA[i][RCOMP] + RGBA[i][GCOMP] + RGBA[i][BCOMP], bits); \
  11. } \
  12. return; \
  13. case GL_LUMINANCE_ALPHA_INTEGER_EXT: \
  14. for (i = 0; i < COUNT; i++) { \
  15. luminance[2*i] = \
  16. CONVERT(RGBA[i][RCOMP] + RGBA[i][GCOMP] + RGBA[i][BCOMP], bits); \
  17. luminance[2*i+1] = CONVERT(RGBA[i][ACOMP], bits); \
  18. } \
  19. } \
  20. } while(0)
  21.  
  22. void
  23. _mesa_pack_luminance_from_rgba_integer(GLuint n,
  24. GLuint rgba[][4], bool rgba_is_signed,
  25. GLvoid *dstAddr,
  26. GLenum dst_format,
  27. GLenum dst_type)
  28. {
  29. assert(dst_format == GL_LUMINANCE_INTEGER_EXT ||
  30. dst_format == GL_LUMINANCE_ALPHA_INTEGER_EXT);
  31.  
  32. switch (dst_type) {
  33. case GL_BYTE:
  34. if (rgba_is_signed) {
  35. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLbyte,
  36. _mesa_signed_to_signed);
  37. } else {
  38. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLbyte,
  39. _mesa_unsigned_to_signed);
  40. }
  41. return;
  42. case GL_UNSIGNED_BYTE:
  43. if (rgba_is_signed) {
  44. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLubyte,
  45. _mesa_signed_to_unsigned);
  46. } else {
  47. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLubyte,
  48. _mesa_unsigned_to_unsigned);
  49. }
  50. return;
  51. case GL_SHORT:
  52. if (rgba_is_signed) {
  53. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLshort,
  54. _mesa_signed_to_signed);
  55. } else {
  56. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLshort,
  57. _mesa_unsigned_to_signed);
  58. }
  59. return;
  60. case GL_UNSIGNED_SHORT:
  61. if (rgba_is_signed) {
  62. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLushort,
  63. _mesa_signed_to_unsigned);
  64. } else {
  65. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLushort,
  66. _mesa_unsigned_to_unsigned);
  67. }
  68. return;
  69. case GL_INT:
  70. if (rgba_is_signed) {
  71. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLint,
  72. _mesa_signed_to_signed);
  73. } else {
  74. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLint,
  75. _mesa_unsigned_to_signed);
  76. }
  77. return;
  78. case GL_UNSIGNED_INT:
  79. if (rgba_is_signed) {
  80. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLuint,
  81. _mesa_signed_to_unsigned);
  82. } else {
  83. PACK_LUMINANCE(n, rgba, dstAddr, dst_format, GLuint,
  84. _mesa_unsigned_to_unsigned);
  85. }
  86. return;
  87. default:
  88. assert(!"Unsupported type");
  89. }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement