Home Reference Source

cables_dev/cables/src/core/cg/cg_texture.js

  1. const DEFAULT_TEXTURE_SIZE = 8;
  2.  
  3. export default class CgTexture
  4. {
  5. constructor(options = {})
  6. {
  7. this.id = CABLES.uuid();
  8. this.width = 0;
  9. this.height = 0;
  10. this.name = "unknown";
  11.  
  12. options = options || {};
  13. this.pixelFormat = options.pixelFormat || CgTexture.PFORMATSTR_RGBA8UB;
  14.  
  15. this.name = options.name || "unknown";
  16.  
  17. if (!options.width) options.width = DEFAULT_TEXTURE_SIZE;
  18. if (!options.height) options.height = DEFAULT_TEXTURE_SIZE;
  19. }
  20. }
  21.  
  22.  
  23. CgTexture.getDefaultTextureData = (name, size, options = {}) =>
  24. {
  25. if (name == "empty")
  26. {
  27. return new Uint8Array(size * size * 4).fill(0);
  28. }
  29. else
  30. if (name == "color")
  31. {
  32. const data = new Uint8Array(size * size * 4);
  33. let r = options.r || 1;
  34. let g = options.g || 1;
  35. let b = options.b || 1;
  36.  
  37. for (let x = 0; x < size * size; x++)
  38. {
  39. data[x * 4 + 0] = r;
  40. data[x * 4 + 1] = g;
  41. data[x * 4 + 2] = b;
  42. data[x * 4 + 3] = 255;
  43. }
  44. return data;
  45. }
  46. else
  47. if (name == "randomUInt")
  48. {
  49. const data = new Uint8Array(size * size * 4);
  50.  
  51. for (let x = 0; x < size * size; x++)
  52. {
  53. data[x * 4 + 0] = Math.random() * 255;
  54. data[x * 4 + 1] = Math.random() * 255;
  55. data[x * 4 + 2] = Math.random() * 255;
  56. data[x * 4 + 3] = 255;
  57. }
  58. return data;
  59. }
  60. else
  61. if (name == "random" || name == "randomFloat")
  62. {
  63. const data = new Float32Array(size * size * 4);
  64.  
  65. for (let x = 0; x < size * size; x++)
  66. {
  67. data[x * 4 + 0] = (Math.random() - 0.5) * 2.0;
  68. data[x * 4 + 1] = (Math.random() - 0.5) * 2.0;
  69. data[x * 4 + 2] = (Math.random() - 0.5) * 2.0;
  70. data[x * 4 + 3] = 1;
  71. }
  72. return data;
  73. }
  74. else
  75. if (name == "stripes")
  76. {
  77. const arr = [];
  78.  
  79. let r = options.r;
  80. let g = options.g;
  81. let b = options.b;
  82.  
  83. if (r === undefined)r = 1;
  84. if (g === undefined)g = 1;
  85. if (b === undefined)b = 1;
  86.  
  87. for (let y = 0; y < size; y++)
  88. {
  89. for (let x = 0; x < size; x++)
  90. {
  91. if ((x + y) % 64 < 32)
  92. {
  93. arr.push((200 + (y / size) * 25 + (x / size) * 25) * r);
  94. arr.push((200 + (y / size) * 25 + (x / size) * 25) * g);
  95. arr.push((200 + (y / size) * 25 + (x / size) * 25) * b);
  96. }
  97. else
  98. {
  99. arr.push((40 + (y / size) * 25 + (x / size) * 25) * r);
  100. arr.push((40 + (y / size) * 25 + (x / size) * 25) * g);
  101. arr.push((40 + (y / size) * 25 + (x / size) * 25) * b);
  102. }
  103. arr.push(255);
  104. }
  105. }
  106.  
  107. return new Uint8Array(arr);
  108. }
  109. else
  110. {
  111. console.warn("unknown default texture", name);
  112. return CgTexture.getDefaultTextureData("stripes", size, { "r": 1, "g": 0, "b": 0 });
  113. }
  114. };
  115.  
  116.  
  117.  
  118. CgTexture.FILTER_NEAREST = 0;
  119. CgTexture.FILTER_LINEAR = 1;
  120. CgTexture.FILTER_MIPMAP = 2;
  121.  
  122. CgTexture.WRAP_REPEAT = 0;
  123. CgTexture.WRAP_MIRRORED_REPEAT = 1;
  124. CgTexture.WRAP_CLAMP_TO_EDGE = 2;
  125.  
  126. CgTexture.TYPE_DEFAULT = 0;
  127. CgTexture.TYPE_DEPTH = 1;
  128. CgTexture.TYPE_FLOAT = 2;
  129.  
  130.  
  131. CgTexture.PFORMATSTR_RGB565 = "RGB 5/6/5bit ubyte";
  132.  
  133. CgTexture.PFORMATSTR_R8UB = "R 8bit ubyte";
  134. CgTexture.PFORMATSTR_RG8UB = "RG 8bit ubyte";
  135. CgTexture.PFORMATSTR_RGB8UB = "RGB 8bit ubyte";
  136. CgTexture.PFORMATSTR_RGBA8UB = "RGBA 8bit ubyte";
  137.  
  138. CgTexture.PFORMATSTR_SRGBA8 = "SRGBA 8bit ubyte";
  139.  
  140. CgTexture.PFORMATSTR_R11FG11FB10F = "RGB 11/11/10bit float";
  141.  
  142. CgTexture.PFORMATSTR_R16F = "R 16bit float";
  143. CgTexture.PFORMATSTR_RG16F = "RG 16bit float";
  144. CgTexture.PFORMATSTR_RGB16F = "RGB 16bit float";
  145. CgTexture.PFORMATSTR_RGBA16F = "RGBA 16bit float";
  146.  
  147.  
  148. CgTexture.PFORMATSTR_R32F = "R 32bit float";
  149. CgTexture.PFORMATSTR_RG32F = "RG 32bit float";
  150. CgTexture.PFORMATSTR_RGB32F = "RGB 32bit float";
  151. CgTexture.PFORMATSTR_RGBA32F = "RGBA 32bit float";
  152.  
  153. CgTexture.PFORMATSTR_DEPTH = "DEPTH";
  154.  
  155.  
  156. CgTexture.PIXELFORMATS = [
  157.  
  158. CgTexture.PFORMATSTR_RGB565,
  159.  
  160. CgTexture.PFORMATSTR_R8UB,
  161. CgTexture.PFORMATSTR_RG8UB,
  162. CgTexture.PFORMATSTR_RGB8UB,
  163. CgTexture.PFORMATSTR_RGBA8UB,
  164.  
  165. CgTexture.PFORMATSTR_SRGBA8,
  166.  
  167. CgTexture.PFORMATSTR_R11FG11FB10F,
  168. CgTexture.PFORMATSTR_R16F,
  169. CgTexture.PFORMATSTR_RG16F,
  170. CgTexture.PFORMATSTR_RGBA16F,
  171.  
  172. CgTexture.PFORMATSTR_R32F,
  173. CgTexture.PFORMATSTR_RGBA32F
  174.  
  175. ];