UBO
This commit is contained in:
		
							parent
							
								
									fd1ce57019
								
							
						
					
					
						commit
						54d4301e5f
					
				| @ -25,6 +25,7 @@ class VAO | |||||||
| // Тип буфера
 | // Тип буфера
 | ||||||
| enum BUFFER_TYPE {  VERTEX = GL_ARRAY_BUFFER | enum BUFFER_TYPE {  VERTEX = GL_ARRAY_BUFFER | ||||||
|                   , ELEMENT = GL_ELEMENT_ARRAY_BUFFER |                   , ELEMENT = GL_ELEMENT_ARRAY_BUFFER | ||||||
|  |                   , UNIFORM = GL_UNIFORM_BUFFER | ||||||
|                  }; |                  }; | ||||||
| 
 | 
 | ||||||
| // Объект вершинного буфера
 | // Объект вершинного буфера
 | ||||||
| @ -47,4 +48,15 @@ class BO | |||||||
|         static std::map<GLuint, GLuint> handler_count; // Счетчик использований дескриптора
 |         static std::map<GLuint, GLuint> handler_count; // Счетчик использований дескриптора
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #endif // BUFFERS_H
 | // Объект uniform-буфера
 | ||||||
|  | class UBO : public BO | ||||||
|  | { | ||||||
|  |     public: | ||||||
|  |         UBO(int size, int binding); // Создает пустой uniform-буфер заданного размера с автоматической привязкой
 | ||||||
|  |         UBO(const void *data, int size, int binding); // Создает пустой uniform-буфер заданного размера с автоматической привязкой
 | ||||||
|  | 
 | ||||||
|  |         void rebind(int binding); // Перепривязка
 | ||||||
|  |         void loadSub(const void *data, int size, int offset = 0); // Загрузка с отступом
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif // BUFFERS_H
 | ||||||
|  | |||||||
| @ -117,3 +117,28 @@ void BO::use() | |||||||
| { | { | ||||||
|     glBindBuffer(type, handler); // Привязка элементного буфера
 |     glBindBuffer(type, handler); // Привязка элементного буфера
 | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // Создает пустой uniform-буфер заданного размера с автоматической привязкой
 | ||||||
|  | UBO::UBO(int size, int binding) : BO(UNIFORM, 0, size) | ||||||
|  | { | ||||||
|  |     rebind(binding); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Создает пустой uniform-буфер заданного размера с автоматической привязкой
 | ||||||
|  | UBO::UBO(const void *data, int size, int binding) : BO(UNIFORM, data, size) | ||||||
|  | { | ||||||
|  |     rebind(binding); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // перепривязка
 | ||||||
|  | void UBO::rebind(int binding) | ||||||
|  | { | ||||||
|  |     glBindBufferBase(type, binding, handler);  | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Загрузка с отступом
 | ||||||
|  | void UBO::loadSub(const void *data, int size, int offset) | ||||||
|  | { | ||||||
|  |     use(); | ||||||
|  |     glBufferSubData(type, offset, size, data); | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user