#include "texture_view.h" #include #include #include #include #include #include #include #include // Default texture to load if no texture is provided. static const char* CLOUDS1_TEXTURE = "/assets/skybox/clouds1/clouds1_west.bmp"; bool boot(State* state, Game* game) { assert(game); // Usage: [texture file] const char* texture_file = game->argc > 1 ? game->argv[1] : CLOUDS1_TEXTURE; RenderBackend* render_backend = gfx_get_render_backend(game->gfx); Texture* texture = gfx_load_texture( render_backend, &(LoadTextureCmd){ .origin = TextureFromFile, .type = LoadTexture, .filtering = LinearFiltering, .mipmaps = false, .data.texture.filepath = mstring_make(texture_file)}); ShaderProgram* shader = gfx_make_view_texture_shader(render_backend); if (!shader) { return false; } Geometry* geometry = gfx_make_quad_11(render_backend); if (!geometry) { return false; } MaterialDesc material_desc = (MaterialDesc){0}; material_desc.uniforms[0] = (ShaderUniform){ .type = UniformTexture, .value.texture = texture, .name = sstring_make("Texture")}; material_desc.num_uniforms = 1; Material* material = gfx_make_material(&material_desc); if (!material) { return false; } MeshDesc mesh_desc = (MeshDesc){0}; mesh_desc.geometry = geometry; mesh_desc.material = material; mesh_desc.shader = shader; Mesh* mesh = gfx_make_mesh(&mesh_desc); if (!mesh) { return false; } SceneObject* object = gfx_make_object(); if (!object) { return false; } gfx_add_object_mesh(object, mesh); SceneNode* node = gfx_make_object_node(object); SceneNode* root = gfx_get_scene_root(game->scene); gfx_set_node_parent(node, root); return true; }