34 #include "../api_display.h"
36 #include "../../Core/IOData/file_system.h"
37 #include "graphic_context.h"
38 #include "uniform_vector.h"
46 class ProgramObject_Impl;
48 class GraphicContextProvider;
49 class XMLResourceDocument;
50 class ProgramObjectProvider;
119 static ProgramObject load(
GraphicContext &gc,
const std::string &vertex_fullname,
const std::string &geometry_fullname,
const std::string &fragment_fullname);
178 static ProgramObject load_and_link(
GraphicContext &gc,
const std::string &vertex_fullname,
const std::string &geometry_fullname,
const std::string &fragment_fullname);
199 static ProgramObject load_and_link(
GraphicContext &gc,
const std::string &vertex_filename,
const std::string &geometry_filename,
const std::string &fragment_filename,
const FileSystem &fs);
230 void throw_if_null()
const;
236 unsigned int get_handle()
const;
239 std::vector<ShaderObject> get_shaders()
const;
242 std::string get_info_log()
const;
247 int get_attribute_location(
const std::string &name)
const;
252 int get_uniform_location(
const std::string &name)
const;
259 int get_uniform_buffer_size(
const std::string &block_name)
const;
262 int get_uniform_buffer_size(
int block_index)
const;
267 int get_uniform_buffer_index(
const std::string &block_name)
const;
272 int get_storage_buffer_index(
const std::string &name)
const;
289 void bind_attribute_location(
int index,
const std::string &name);
293 void bind_frag_data_location(
int color_number,
const std::string &name);
303 void set_uniform1i(
int location,
int value_a);
304 void set_uniform2i(
int location,
int value_a,
int value_b);
305 void set_uniform3i(
int location,
int value_a,
int value_b,
int value_c);
306 void set_uniform4i(
int location,
int value_a,
int value_b,
int value_c,
int value_d);
307 void set_uniformiv(
int location,
int size,
int count,
const int *data);
320 void set_uniform1f(
int location,
float value_a);
321 void set_uniform2f(
int location,
float value_a,
float value_b);
322 void set_uniform3f(
int location,
float value_a,
float value_b,
float value_c);
323 void set_uniform4f(
int location,
float value_a,
float value_b,
float value_c,
float value_d);
324 void set_uniformfv(
int location,
int size,
int count,
const float *data);
331 void set_uniform_matrix(
int location,
int size,
int count,
bool transpose,
const float *data);
339 void set_uniform1i(
const std::string &name,
int value_a) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniform1i(loc, value_a); }
340 void set_uniform2i(
const std::string &name,
int value_a,
int value_b) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniform2i(loc, value_a, value_b); }
341 void set_uniform3i(
const std::string &name,
int value_a,
int value_b,
int value_c) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniform3i(loc, value_a, value_b, value_c); }
342 void set_uniform4i(
const std::string &name,
int value_a,
int value_b,
int value_c,
int value_d) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniform4i(loc, value_a, value_b, value_c, value_d); }
343 void set_uniformiv(
const std::string &name,
int size,
int count,
const int *data) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniformiv(loc, size, count, data); }
356 void set_uniform1f(
const std::string &name,
float value_a) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniform1f(loc, value_a); }
357 void set_uniform2f(
const std::string &name,
float value_a,
float value_b) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniform2f(loc, value_a, value_b); }
358 void set_uniform3f(
const std::string &name,
float value_a,
float value_b,
float value_c) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniform3f(loc, value_a, value_b, value_c); }
359 void set_uniform4f(
const std::string &name,
float value_a,
float value_b,
float value_c,
float value_d) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniform4f(loc, value_a, value_b, value_c, value_d); }
360 void set_uniformfv(
const std::string &name,
int size,
int count,
const float *data) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniformfv(loc, size, count, data); }
367 void set_uniform_matrix(
const std::string &name,
int size,
int count,
bool transpose,
const float *data) {
int loc = get_uniform_location(name);
if (loc >= 0)
set_uniform_matrix(loc, size, count, transpose, data); }
376 void set_uniform_buffer_index(
const std::string &block_name,
int bind_index);
379 void set_uniform_buffer_index(
int block_index,
int bind_index);
382 void set_storage_buffer_index(
const std::string &block_name,
int bind_index);
385 void set_storage_buffer_index(
int block_index,
int bind_index);
391 std::shared_ptr<ProgramObject_Impl> impl;
Shader Object.
Definition: shader_object.h:69
Type x
Definition: vec3.h:81
void set_uniformfv(int location, int count, const Vec4f *data)
Definition: program_object.h:330
Program Object provider.
Definition: program_object_provider.h:43
Type y
Definition: vec3.h:82
Type z
Definition: vec4.h:83
I/O Device interface.
Definition: iodevice.h:51
Interface for implementing a GraphicContext target.
Definition: graphic_context_provider.h:87
void set_uniform4i(int location, const Vec4i &vec)
Definition: program_object.h:310
void set_uniform4b(const std::string &name, const Vec4b &vec)
Definition: program_object.h:352
void set_uniform2b(const std::string &name, const Vec2b &vec)
Definition: program_object.h:350
void set_uniform3s(int location, const Vec3s &vec)
Definition: program_object.h:312
void set_uniform3s(const std::string &name, const Vec3s &vec)
Definition: program_object.h:348
void set_uniform2b(int location, const Vec2b &vec)
Definition: program_object.h:314
void set_uniform_matrix(int location, int count, const Mat2f *matrix)
Definition: program_object.h:335
bool is_null() const
Returns true if this object is invalid.
Definition: program_object.h:227
void set_uniform4i(const std::string &name, int value_a, int value_b, int value_c, int value_d)
Definition: program_object.h:342
void set_uniformiv(int location, int count, const Vec2i *data)
Definition: program_object.h:317
void set_uniform2i(const std::string &name, int value_a, int value_b)
Definition: program_object.h:340
void set_uniform4b(int location, const Vec4b &vec)
Definition: program_object.h:316
void set_uniform2f(int location, const Vec2f &vec)
Definition: program_object.h:325
void set_uniform_matrix(int location, const Mat4f &matrix)
Definition: program_object.h:334
Type x
Definition: vec2.h:82
Type matrix[4]
Definition: mat2.h:183
void set_uniformfv(const std::string &name, int size, int count, const float *data)
Definition: program_object.h:360
void set_uniform4i(const std::string &name, const Vec4i &vec)
Definition: program_object.h:346
void set_uniformiv(int location, int count, const Vec4i *data)
Definition: program_object.h:319
void set_uniform_matrix(const std::string &name, int size, int count, bool transpose, const float *data)
Definition: program_object.h:367
Virtual File System (VFS).
Definition: file_system.h:48
void set_uniform3f(const std::string &name, float value_a, float value_b, float value_c)
Definition: program_object.h:358
void set_uniform_matrix(int location, const Mat3f &matrix)
Definition: program_object.h:333
2D matrix
Definition: mat2.h:46
void set_uniform_matrix(int location, const Mat2f &matrix)
Definition: program_object.h:332
void set_uniform1f(const std::string &name, float value_a)
Definition: program_object.h:356
void set_uniformfv(const std::string &name, int count, const Vec4f *data)
Definition: program_object.h:366
void set_uniformiv(const std::string &name, int size, int count, const int *data)
Definition: program_object.h:343
3D matrix
Definition: mat2.h:49
void set_uniform3f(int location, const Vec3f &vec)
Definition: program_object.h:326
void set_uniform_matrix(int location, int count, const Mat3f *matrix)
Definition: program_object.h:336
void set_uniformfv(int location, int count, const Vec3f *data)
Definition: program_object.h:329
void set_uniformiv(const std::string &name, int count, const Vec2i *data)
Definition: program_object.h:353
void set_uniformfv(const std::string &name, int count, const Vec3f *data)
Definition: program_object.h:365
void set_uniform3b(const std::string &name, const Vec3b &vec)
Definition: program_object.h:351
3D vector
Definition: line_ray.h:49
void set_uniform2f(const std::string &name, float value_a, float value_b)
Definition: program_object.h:357
Type y
Definition: vec4.h:82
void set_uniform2i(const std::string &name, const Vec2i &vec)
Definition: program_object.h:344
Interface to drawing graphics.
Definition: graphic_context.h:257
void set_uniform1i(const std::string &name, int value_a)
Definition: program_object.h:339
void set_uniformfv(int location, int count, const Vec2f *data)
Definition: program_object.h:328
void set_uniform3i(const std::string &name, const Vec3i &vec)
Definition: program_object.h:345
void set_uniform4f(int location, const Vec4f &vec)
Definition: program_object.h:327
void set_uniform3i(const std::string &name, int value_a, int value_b, int value_c)
Definition: program_object.h:341
void set_uniform3b(int location, const Vec3b &vec)
Definition: program_object.h:315
Type w
Definition: vec4.h:84
Program Object.
Definition: program_object.h:70
void set_uniform_matrix(const std::string &name, const Mat2f &matrix)
Definition: program_object.h:368
void set_uniform_matrix(const std::string &name, int count, const Mat2f *matrix)
Definition: program_object.h:371
void set_uniform_matrix(const std::string &name, int count, const Mat3f *matrix)
Definition: program_object.h:372
void set_uniform_matrix(const std::string &name, int count, const Mat4f *matrix)
Definition: program_object.h:373
void set_uniformiv(int location, int count, const Vec3i *data)
Definition: program_object.h:318
XML Resource Document.
Definition: xml_resource_document.h:49
void set_uniform_matrix(int location, int count, const Mat4f *matrix)
Definition: program_object.h:337
4D matrix
Definition: mat2.h:52
void set_uniform_matrix(const std::string &name, const Mat4f &matrix)
Definition: program_object.h:370
void set_uniform4f(const std::string &name, float value_a, float value_b, float value_c, float value_d)
Definition: program_object.h:359
void set_uniform2i(int location, const Vec2i &vec)
Definition: program_object.h:308
Type matrix[16]
The matrix (in column-major format)
Definition: mat4.h:353
void set_uniform3i(int location, const Vec3i &vec)
Definition: program_object.h:309
Type x
Definition: vec4.h:81
void set_uniformiv(const std::string &name, int count, const Vec4i *data)
Definition: program_object.h:355
4D vector
Definition: size.h:48
Type matrix[9]
Definition: mat3.h:226
void set_uniform_matrix(const std::string &name, const Mat3f &matrix)
Definition: program_object.h:369
void set_uniform4f(const std::string &name, const Vec4f &vec)
Definition: program_object.h:363
void set_uniform4s(const std::string &name, const Vec4s &vec)
Definition: program_object.h:349
void set_uniform2s(const std::string &name, const Vec2s &vec)
Definition: program_object.h:347
void set_uniformiv(const std::string &name, int count, const Vec3i *data)
Definition: program_object.h:354
void set_uniform3f(const std::string &name, const Vec3f &vec)
Definition: program_object.h:362
void set_uniformfv(const std::string &name, int count, const Vec2f *data)
Definition: program_object.h:364
Type z
Definition: vec3.h:83
void set_uniform2f(const std::string &name, const Vec2f &vec)
Definition: program_object.h:361
Type y
Definition: vec2.h:83
void set_uniform2s(int location, const Vec2s &vec)
Definition: program_object.h:311
void set_uniform4s(int location, const Vec4s &vec)
Definition: program_object.h:313