| Flutter Impeller |

buffer_bindings_gles.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_BUFFER_BINDINGS_GLES_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_BUFFER_BINDINGS_GLES_H_
7
8 #include <unordered_map>
9 #include <vector>
10
11 #include "impeller/core/shader_types.h"
12 #include "impeller/renderer/backend/gles/gles.h"
13 #include "impeller/renderer/backend/gles/proc_table_gles.h"
14 #include "impeller/renderer/command.h"
15
16 namespace impeller {
17
18 //------------------------------------------------------------------------------
19 /// @brief Sets up stage bindings for single draw call in the OpenGLES
20 /// backend.
21 ///
22 class BufferBindingsGLES {
23 public:
24 BufferBindingsGLES();
25
26 ~BufferBindingsGLES();
27
28 bool RegisterVertexStageInput(
29 const ProcTableGLES& gl,
30 const std::vector<ShaderStageIOSlot>& inputs,
31 const std::vector<ShaderStageBufferLayout>& layouts);
32
33 bool ReadUniformsBindings(const ProcTableGLES& gl, GLuint program);
34
35 bool BindVertexAttributes(const ProcTableGLES& gl,
36 size_t vertex_offset) const;
37
38 bool BindUniformData(const ProcTableGLES& gl,
39 Allocator& transients_allocator,
40 const Bindings& vertex_bindings,
41 const Bindings& fragment_bindings);
42
43 bool UnbindVertexAttributes(const ProcTableGLES& gl) const;
44
45 private:
46 //----------------------------------------------------------------------------
47 /// @brief The arguments to glVertexAttribPointer.
48 ///
49 struct VertexAttribPointer {
50 GLuint index = 0u;
51 GLint size = 4;
52 GLenum type = GL_FLOAT;
53 GLenum normalized = GL_FALSE;
54 GLsizei stride = 0u;
55 GLsizei offset = 0u;
56 };
57 std::vector<VertexAttribPointer> vertex_attrib_arrays_;
58
59 std::unordered_map<std::string, GLint> uniform_locations_;
60
61 using BindingMap = std::unordered_map<std::string, std::vector<GLint>>;
62 BindingMap binding_map_ = {};
63
64 const std::vector<GLint>& ComputeUniformLocations(
65 const ShaderMetadata* metadata);
66
67 GLint ComputeTextureLocation(const ShaderMetadata* metadata);
68
69 bool BindUniformBuffer(const ProcTableGLES& gl,
70 Allocator& transients_allocator,
71 const BufferResource& buffer);
72
73 std::optional<size_t> BindTextures(const ProcTableGLES& gl,
74 const Bindings& bindings,
75 ShaderStage stage,
76 size_t unit_start_index = 0);
77
78 BufferBindingsGLES(const BufferBindingsGLES&) = delete;
79
80 BufferBindingsGLES& operator=(const BufferBindingsGLES&) = delete;
81 };
82
83 } // namespace impeller
84
85 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_BUFFER_BINDINGS_GLES_H_
impeller::BufferBindingsGLES::BindUniformData
bool BindUniformData(const ProcTableGLES &gl, Allocator &transients_allocator, const Bindings &vertex_bindings, const Bindings &fragment_bindings)
Definition: buffer_bindings_gles.cc:145
impeller::BufferBindingsGLES::ReadUniformsBindings
bool ReadUniformsBindings(const ProcTableGLES &gl, GLuint program)
Definition: buffer_bindings_gles.cc:83
impeller::BufferBindingsGLES::RegisterVertexStageInput
bool RegisterVertexStageInput(const ProcTableGLES &gl, const std::vector< ShaderStageIOSlot > &inputs, const std::vector< ShaderStageBufferLayout > &layouts)
Definition: buffer_bindings_gles.cc:22
impeller::ShaderMetadata
Definition: shader_types.h:72
impeller::BufferBindingsGLES::BufferBindingsGLES
BufferBindingsGLES()
impeller::BufferBindingsGLES
Sets up stage bindings for single draw call in the OpenGLES backend.
Definition: buffer_bindings_gles.h:22
impeller::ShaderStage
ShaderStage
Definition: shader_types.h:22
impeller::Resource< BufferView >
command.h
impeller::BufferBindingsGLES::UnbindVertexAttributes
bool UnbindVertexAttributes(const ProcTableGLES &gl) const
Definition: buffer_bindings_gles.cc:175
impeller::Allocator
An object that allocates device memory.
Definition: allocator.h:22
impeller::ProcTableGLES
Definition: proc_table_gles.h:217
proc_table_gles.h
gles.h
impeller::BufferBindingsGLES::BindVertexAttributes
bool BindVertexAttributes(const ProcTableGLES &gl, size_t vertex_offset) const
Definition: buffer_bindings_gles.cc:128
impeller::BufferBindingsGLES::~BufferBindingsGLES
~BufferBindingsGLES()
shader_types.h
impeller
Definition: aiks_context.cc:10
impeller::Bindings
Definition: command.h:73