Advertisement
atm959

Renderer.cpp

Mar 28th, 2019
385
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.09 KB | None | 0 0
  1. #include "Renderer.h"
  2.  
  3. Renderer::Renderer(){
  4.     GX2InitSampler(&this->sampler, GX2_TEX_CLAMP_MODE_WRAP, GX2_TEX_XY_FILTER_MODE_POINT);
  5.     GX2InitSamplerLOD(&this->sampler, 0, 13, -3.0f);
  6. }
  7.  
  8. Renderer::~Renderer(){
  9.     for(int i = 0; i < this->vertexBuffers.size(); i++) GX2RDestroyBufferEx(this->vertexBuffers.at(i), (GX2RResourceFlags) 0);
  10.     for(int i = 0; i < this->texCoordBuffers.size(); i++) GX2RDestroyBufferEx(this->texCoordBuffers.at(i), (GX2RResourceFlags) 0);
  11.     for(int i = 0; i < this->colorBuffers.size(); i++) GX2RDestroyBufferEx(this->colorBuffers.at(i), (GX2RResourceFlags) 0);
  12.     for(int i = 0; i < this->shaderGroups.size(); i++) WHBGfxFreeShaderGroup(this->shaderGroups.at(i));
  13. }
  14.  
  15. int Renderer::loadVertexData(float vertexData[]){
  16.     GX2RBuffer positionBuffer;
  17.     void *buffer = NULL;
  18.     positionBuffer.flags = (GX2RResourceFlags)(GX2R_RESOURCE_BIND_VERTEX_BUFFER |
  19.                         GX2R_RESOURCE_USAGE_CPU_READ |
  20.                         GX2R_RESOURCE_USAGE_CPU_WRITE |
  21.                         GX2R_RESOURCE_USAGE_GPU_READ);
  22.     positionBuffer.elemSize = 3 * sizeof(float);
  23.     positionBuffer.elemCount = (sizeof(vertexData) / sizeof(float)) / 3;
  24.     GX2RCreateBuffer(&positionBuffer);
  25.     buffer = GX2RLockBufferEx(&positionBuffer, (GX2RResourceFlags)0);
  26.     memcpy(buffer, vertexData, positionBuffer.elemSize * positionBuffer.elemCount);
  27.     GX2RUnlockBufferEx(&positionBuffer, (GX2RResourceFlags)0);
  28.     this->vertexBuffers.push_back(&positionBuffer);
  29. }
  30.  
  31. int Renderer::loadTexCoordData(float texCoordData[]){
  32.     GX2RBuffer texCoordBuffer;
  33.     void *buffer = NULL;
  34.     texCoordBuffer.flags = (GX2RResourceFlags)(GX2R_RESOURCE_BIND_VERTEX_BUFFER |
  35.                             GX2R_RESOURCE_USAGE_CPU_READ |
  36.                             GX2R_RESOURCE_USAGE_CPU_WRITE |
  37.                             GX2R_RESOURCE_USAGE_GPU_READ);
  38.     texCoordBuffer.elemSize = 2 * sizeof(float);
  39.     texCoordBuffer.elemCount = (sizeof(texCoordData) / sizeof(float)) / 2;
  40.     GX2RCreateBuffer(&texCoordBuffer);
  41.     buffer = GX2RLockBufferEx(&texCoordBuffer, (GX2RResourceFlags)0);
  42.     memcpy(buffer, texCoordData, texCoordBuffer.elemSize * texCoordBuffer.elemCount);
  43.     GX2RUnlockBufferEx(&texCoordBuffer, (GX2RResourceFlags)0);
  44.     this->texCoordBuffers.push_back(&texCoordBuffer);
  45. }
  46.  
  47. int Renderer::loadShaderGroup(char* filePath){
  48.  
  49. }
  50.  
  51. void Renderer::setActiveVertexBuffer(int vertexBufferID){
  52.     this->activeVertexBuffer = vertexBufferID;
  53. }
  54.  
  55. void Renderer::setActiveTexCoordBuffer(int texCoordBufferID){
  56.     this->activeTexCoordBuffer = texCoordBufferID;
  57. }
  58.  
  59. void Renderer::setActiveShader(int shaderID){
  60.     this->activeShaderGroup = shaderID;
  61. }
  62.  
  63. void Renderer::prepare3DTV(){
  64.     this->projection = glm::perspective(degToRad(45.0f), (float)1280 / (float)720, NEAR_PLANE, FAR_PLANE);
  65. }
  66.  
  67. void Renderer::prepare2DTV(){
  68.     this->projection = glm::ortho(0.0f, 1280.0f, 720.0f, 0.0f, -1.0f, 1.0f);
  69. }
  70.  
  71. void Renderer::prepare3DDRC(){
  72.     this->projection = glm::perspective(degToRad(45.0f), (float)854 / (float)480, NEAR_PLANE, FAR_PLANE);
  73. }
  74.  
  75. void Renderer::prepare2DDRC(){
  76.     this->projection = glm::ortho(0.0f, 854.0f, 480.0f, 0.0f, -1.0f, 1.0f);
  77. }
  78.  
  79. void Renderer::startTV(){
  80.     WHBGfxBeginRenderTV();
  81. }
  82.  
  83. void Renderer::startDRC(){
  84.     WHBGfxBeginRenderDRC();
  85. }
  86.  
  87. void Renderer::endTV(){
  88.     WHBGfxFinishRenderTV();
  89. }
  90.  
  91. void Renderer::endDRC(){
  92.     WHBGfxFinishRenderDRC();
  93. }
  94.  
  95. void Renderer::renderTexture(){
  96.     WHBGfxClearColor(0.5f, 0.5f, 1.0f, 1.0f);
  97.     GX2SetCullOnlyControl(GX2_FRONT_FACE_CCW, FALSE, TRUE);
  98.     GX2SetColorControl(GX2_LOGIC_OP_COPY, 0xFF, FALSE, TRUE);
  99.     GX2SetBlendControl(GX2_RENDER_TARGET_0, GX2_BLEND_MODE_SRC_ALPHA, GX2_BLEND_MODE_INV_SRC_ALPHA, GX2_BLEND_COMBINE_MODE_ADD, TRUE, GX2_BLEND_MODE_ONE, GX2_BLEND_MODE_INV_SRC_ALPHA, GX2_BLEND_COMBINE_MODE_ADD);
  100.     GX2SetPixelSampler(&this->sampler, 0);
  101.     GX2SetVertexUniformReg(this->shaderGroups.at(activeShaderGroup)->vertexShader->uniformVars[0].offset, 16, (uint32_t *)&mvpDRC[0][0]);
  102.     GX2DrawEx(GX2_PRIMITIVE_MODE_TRIANGLES, (64*64)*6, 0, 1);
  103. }
  104.  
  105. void Renderer::renderLines(){
  106.  
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement