Flutter Engine
 
Loading...
Searching...
No Matches
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 <vector>
9
15#include "third_party/abseil-cpp/absl/container/flat_hash_map.h"
16
17namespace impeller {
18
19namespace testing {
20FML_TEST_CLASS(BufferBindingsGLESTest, BindUniformData);
21FML_TEST_CLASS(BufferBindingsGLESTest, BindArrayData);
22} // namespace testing
23
24//------------------------------------------------------------------------------
25/// @brief Sets up stage bindings for single draw call in the OpenGLES
26/// backend.
27///
29 public:
31
33
35 const ProcTableGLES& gl,
36 const std::vector<ShaderStageIOSlot>& inputs,
37 const std::vector<ShaderStageBufferLayout>& layouts);
38
39 bool ReadUniformsBindings(const ProcTableGLES& gl, GLuint program);
40
42 size_t binding,
43 size_t vertex_offset);
44
45 bool BindUniformData(const ProcTableGLES& gl,
46 const std::vector<TextureAndSampler>& bound_textures,
47 const std::vector<BufferResource>& bound_buffers,
48 Range texture_range,
49 Range buffer_range);
50
52
53 private:
54 FML_FRIEND_TEST(testing::BufferBindingsGLESTest, BindUniformData);
55 FML_FRIEND_TEST(testing::BufferBindingsGLESTest, BindArrayData);
56 //----------------------------------------------------------------------------
57 /// @brief The arguments to glVertexAttribPointer.
58 ///
59 struct VertexAttribPointer {
60 GLuint index = 0u;
61 GLint size = 4;
62 GLenum type = GL_FLOAT;
63 GLenum normalized = GL_FALSE;
64 GLsizei stride = 0u;
65 GLsizei offset = 0u;
66 };
67 std::vector<std::vector<VertexAttribPointer>> vertex_attrib_arrays_;
68
69 absl::flat_hash_map<std::string, GLint> uniform_locations_;
70 absl::flat_hash_map<std::string, std::pair<GLint, GLuint>> ubo_locations_;
71
72 using BindingMap = absl::flat_hash_map<std::string, std::vector<GLint>>;
73 BindingMap binding_map_ = {};
74 GLuint vertex_array_object_ = 0;
75 GLuint program_handle_ = GL_NONE;
76 bool use_ubo_ = false;
77
78 const std::vector<GLint>& ComputeUniformLocations(
79 const ShaderMetadata* metadata);
80
81 bool ReadUniformsBindingsV2(const ProcTableGLES& gl, GLuint program);
82
83 bool ReadUniformsBindingsV3(const ProcTableGLES& gl, GLuint program);
84
85 GLint ComputeTextureLocation(const ShaderMetadata* metadata);
86
87 bool BindUniformBuffer(const ProcTableGLES& gl, const BufferResource& buffer);
88
89 bool BindUniformBufferV2(const ProcTableGLES& gl,
90 const BufferView& buffer,
91 const ShaderMetadata* metadata,
92 const DeviceBufferGLES& device_buffer_gles);
93
94 bool BindUniformBufferV3(const ProcTableGLES& gl,
95 const BufferView& buffer,
96 const ShaderMetadata* metadata,
97 const DeviceBufferGLES& device_buffer_gles);
98
99 std::optional<size_t> BindTextures(
100 const ProcTableGLES& gl,
101 const std::vector<TextureAndSampler>& bound_textures,
102 Range texture_range,
103 ShaderStage stage,
104 size_t unit_start_index = 0);
105
106 BufferBindingsGLES(const BufferBindingsGLES&) = delete;
107
108 BufferBindingsGLES& operator=(const BufferBindingsGLES&) = delete;
109
110 // For testing.
111 void SetUniformBindings(
112 absl::flat_hash_map<std::string, GLint> uniform_locations) {
113 uniform_locations_ = std::move(uniform_locations);
114 }
115};
116
117} // namespace impeller
118
119#endif // FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_BUFFER_BINDINGS_GLES_H_
GLenum type
Sets up stage bindings for single draw call in the OpenGLES backend.
bool BindVertexAttributes(const ProcTableGLES &gl, size_t binding, size_t vertex_offset)
bool ReadUniformsBindings(const ProcTableGLES &gl, GLuint program)
bool UnbindVertexAttributes(const ProcTableGLES &gl)
bool RegisterVertexStageInput(const ProcTableGLES &gl, const std::vector< ShaderStageIOSlot > &inputs, const std::vector< ShaderStageBufferLayout > &layouts)
bool BindUniformData(const ProcTableGLES &gl, const std::vector< TextureAndSampler > &bound_textures, const std::vector< BufferResource > &bound_buffers, Range texture_range, Range buffer_range)
#define FML_FRIEND_TEST(test_case_name, test_name)
Definition macros.h:47
#define FML_TEST_CLASS(test_case_name, test_name)
Definition macros.h:44
Resource< BufferView > BufferResource
Definition command.h:55