UBO
This commit is contained in:
		
							parent
							
								
									fd1ce57019
								
							
						
					
					
						commit
						54d4301e5f
					
				| @ -25,6 +25,7 @@ class VAO | ||||
| // Тип буфера
 | ||||
| enum BUFFER_TYPE {  VERTEX = GL_ARRAY_BUFFER | ||||
|                   , ELEMENT = GL_ELEMENT_ARRAY_BUFFER | ||||
|                   , UNIFORM = GL_UNIFORM_BUFFER | ||||
|                  }; | ||||
| 
 | ||||
| // Объект вершинного буфера
 | ||||
| @ -47,4 +48,15 @@ class BO | ||||
|         static std::map<GLuint, GLuint> handler_count; // Счетчик использований дескриптора
 | ||||
| }; | ||||
| 
 | ||||
| // Объект 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); // Привязка элементного буфера
 | ||||
| } | ||||
| 
 | ||||
| // Создает пустой 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