summaryrefslogtreecommitdiff
path: root/src/new_render/skybox.c
blob: 6afefc3354bbca8934ae1b6c15b5dcf2e6b8eb30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "skybox.h"
#include <assert.h>
#include "glad/glad.h"
#include "ral_common.h"
#include "ral_impl.h"
#include "ral_types.h"
#include "render.h"
#include "render_types.h"

Skybox Skybox_Create(const char** face_paths, int n) {
  assert(n == 6);  // ! we're only supporting a full cubemap for now

  // -- cubemap texture
  TextureHandle handle;
  GPU_Texture* tex = GPU_TextureAlloc(&handle);
  glBindTexture(GL_TEXTURE_CUBE_MAP, tex->id);

  int width, height, nrChannels;
  // unsigned char *data;
  for (unsigned int i = 0; i < n; i++) {
    TextureData data = TextureDataLoad(
        face_paths[i],
        false);  // stbi_load(textures_faces[i].c_str(), &width, &height, &nrChannels, 0);
    assert(data.description.format == TEXTURE_FORMAT_8_8_8_RGB_UNORM);
    glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, data.description.extents.x,
                 data.description.extents.y, 0, GL_RGB, GL_UNSIGNED_BYTE, data.image_data);
  }
  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

  // shader pipeline

  VertexDescription pos_only = { .debug_label = "Position only verts" };
  VertexDesc_AddAttr(&pos_only, "inPos", ATTR_F32x3);
  pos_only.use_full_vertex_size = true;

  ShaderData shader_data = { .data = NULL, .get_layout = &Skybox_GetLayout };

  GraphicsPipelineDesc pipeline_desc = {
    .debug_name = "Skybox pipeline",
    .vertex_desc = pos_only,
    .data_layouts = { shader_data },
    .data_layouts_count = 1,
    .vs = {

    },
    .fs = {

    },
    .wireframe = false,
    .depth_test = true,
  };

  return (Skybox){
    .texture = handle,

  };
}