| 705 | dmGraphics::HVertexBuffer m_VertexBuffer; |
| 706 | |
| 707 | void Initialize(EngineCtx* engine) override |
| 708 | { |
| 709 | const float vertex_data_no_index[] = { |
| 710 | -0.5f, -0.5f, |
| 711 | 0.5f, -0.5f, |
| 712 | -0.5f, 0.5f, |
| 713 | 0.5f, -0.5f, |
| 714 | 0.5f, 0.5f, |
| 715 | -0.5f, 0.5f, |
| 716 | }; |
| 717 | |
| 718 | m_VertexBuffer = dmGraphics::NewVertexBuffer(engine->m_GraphicsContext, sizeof(vertex_data_no_index), (void*) vertex_data_no_index, dmGraphics::BUFFER_USAGE_STATIC_DRAW); |
| 719 | |
| 720 | dmGraphics::ShaderDesc vs_desc = {}; |
| 721 | dmGraphics::ShaderDesc fs_desc = {}; |
| 722 | |
| 723 | if (dmGraphics::GetInstalledAdapterFamily() == dmGraphics::ADAPTER_FAMILY_OPENGL) |
| 724 | { |
| 725 | assert(false && "TODO: storage buffers are only supported on vulkan currently"); |
| 726 | AddShader(&vs_desc, dmGraphics::ShaderDesc::LANGUAGE_GLSL_SM430, (uint8_t*) graphics_assets::glsl_vertex_program, sizeof(graphics_assets::glsl_vertex_program)); |
| 727 | AddShader(&fs_desc, dmGraphics::ShaderDesc::LANGUAGE_GLSL_SM430, (uint8_t*) graphics_assets::glsl_fragment_program_ssbo, sizeof(graphics_assets::glsl_fragment_program_ssbo)); |
| 728 | } |
| 729 | else |
| 730 | { |
| 731 | AddShader(&vs_desc, dmGraphics::ShaderDesc::LANGUAGE_SPIRV, (uint8_t*) graphics_assets::spirv_vertex_program, sizeof(graphics_assets::spirv_vertex_program)); |
| 732 | AddShader(&fs_desc, dmGraphics::ShaderDesc::LANGUAGE_SPIRV, (uint8_t*) graphics_assets::spirv_fragment_program_ssbo, sizeof(graphics_assets::spirv_fragment_program_ssbo)); |
| 733 | } |
| 734 | |
| 735 | AddShaderResource(&vs_desc, "pos", dmGraphics::ShaderDesc::ShaderDataType::SHADER_TYPE_VEC2, 0, 0, BINDING_TYPE_INPUT); |
| 736 | AddShaderResource(&fs_desc, "Test", dmGraphics::ShaderDesc::SHADER_TYPE_STORAGE_BUFFER, 0, 1, BINDING_TYPE_STORAGE_BUFFER); |
| 737 | |
| 738 | dmGraphics::HVertexProgram vs_program = dmGraphics::NewVertexProgram(engine->m_GraphicsContext, &vs_desc, 0, 0); |
| 739 | dmGraphics::HFragmentProgram fs_program = dmGraphics::NewFragmentProgram(engine->m_GraphicsContext, &fs_desc, 0, 0); |
| 740 | |
| 741 | DeleteShaderDesc(&vs_desc); |
| 742 | DeleteShaderDesc(&fs_desc); |
| 743 | |
| 744 | m_Program = dmGraphics::NewProgram(engine->m_GraphicsContext, vs_program, fs_program); |
| 745 | |
| 746 | dmGraphics::HVertexStreamDeclaration stream_declaration = dmGraphics::NewVertexStreamDeclaration(engine->m_GraphicsContext); |
| 747 | dmGraphics::AddVertexStream(stream_declaration, "pos", 2, dmGraphics::TYPE_FLOAT, false); |
| 748 | m_VertexDeclaration = dmGraphics::NewVertexDeclaration(engine->m_GraphicsContext, stream_declaration); |
| 749 | |
| 750 | struct StorageBuffer_Data |
| 751 | { |
| 752 | float m_Member1[4]; |
| 753 | }; |
| 754 | |
| 755 | StorageBuffer_Data storage_data[16] = {}; |
| 756 | |
| 757 | for (int i = 0; i < DM_ARRAY_SIZE(storage_data); ++i) |
| 758 | { |
| 759 | storage_data[i].m_Member1[0] = (float) (10 * i + 0); |
| 760 | storage_data[i].m_Member1[1] = (float) (10 * i + 1); |
| 761 | storage_data[i].m_Member1[2] = (float) (10 * i + 2); |
| 762 | storage_data[i].m_Member1[3] = (float) (10 * i + 3); |
| 763 | } |
| 764 |
nothing calls this directly
no test coverage detected