Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit dd5f7ee
Showing
58 changed files
with
17,236 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
################################################## Project ################################################## | ||
cmake_minimum_required(VERSION 3.2 FATAL_ERROR) | ||
project (gl VERSION 4.5 LANGUAGES CXX) | ||
list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") | ||
set_property (GLOBAL PROPERTY USE_FOLDERS ON) | ||
set (CMAKE_CXX_VISIBILITY_PRESET hidden) | ||
set (CMAKE_VISIBILITY_INLINES_HIDDEN 1) | ||
|
||
################################################## Options ################################################## | ||
option(BUILD_SHARED_LIBS "Build shared (dynamic) libraries." ON) | ||
option(BUILD_TESTS "Build tests." OFF) | ||
option(CUDA_INTEROP_SUPPORT "Include cuda interoperation support for buffers and textures." OFF) | ||
|
||
################################################## Sources ################################################## | ||
set(PROJECT_SOURCES | ||
CMakeLists.txt | ||
cmake/assign_source_group.cmake | ||
cmake/import_library.cmake | ||
|
||
include/gl/auxiliary/glm_uniforms.hpp | ||
include/gl/all.hpp | ||
include/gl/buffer.hpp | ||
include/gl/command_execution.hpp | ||
include/gl/compute.hpp | ||
include/gl/debug.hpp | ||
include/gl/draw_commands.hpp | ||
include/gl/framebuffer.hpp | ||
include/gl/opengl.hpp | ||
include/gl/per_fragment_ops.hpp | ||
include/gl/pipeline.hpp | ||
include/gl/program.hpp | ||
include/gl/query.hpp | ||
include/gl/rasterization.hpp | ||
include/gl/renderbuffer.hpp | ||
include/gl/sampler.hpp | ||
include/gl/shader.hpp | ||
include/gl/state.hpp | ||
include/gl/sync.hpp | ||
include/gl/tessellation.hpp | ||
include/gl/texture.hpp | ||
include/gl/texture_view.hpp | ||
include/gl/transform_feedback.hpp | ||
include/gl/unmanaged.hpp | ||
include/gl/vertex_array.hpp | ||
include/gl/vertex_post_processing_ops.hpp | ||
include/gl/viewport.hpp | ||
|
||
source/buffer.cpp | ||
source/command_execution.cpp | ||
source/compute.cpp | ||
source/debug.cpp | ||
source/draw_commands.cpp | ||
source/framebuffer.cpp | ||
source/opengl.cpp | ||
source/per_fragment_ops.cpp | ||
source/pipeline.cpp | ||
source/program.cpp | ||
source/query.cpp | ||
source/rasterization.cpp | ||
source/renderbuffer.cpp | ||
source/sampler.cpp | ||
source/shader.cpp | ||
source/state.cpp | ||
source/sync.cpp | ||
source/tessellation.cpp | ||
source/texture.cpp | ||
source/texture_view.cpp | ||
source/transform_feedback.cpp | ||
source/vertex_array.cpp | ||
source/vertex_post_processing_ops.cpp | ||
source/viewport.cpp | ||
|
||
license.txt | ||
readme.md | ||
) | ||
include(assign_source_group) | ||
assign_source_group(${PROJECT_SOURCES}) | ||
|
||
set (EXPORT_HEADER "${PROJECT_BINARY_DIR}/export.hpp") | ||
list (APPEND PROJECT_SOURCES ${EXPORT_HEADER}) | ||
source_group("include\\${PROJECT_NAME}" FILES ${EXPORT_HEADER}) | ||
|
||
################################################## Dependencies ################################################## | ||
include(import_library) | ||
|
||
find_package (GLEW REQUIRED) | ||
import_library(glew GLEW_INCLUDE_DIR GLEW_LIBRARY) | ||
|
||
find_package (OpenGL REQUIRED) | ||
import_library(opengl OPENGL_INCLUDE_DIR OPENGL_LIBRARIES) | ||
|
||
if(CUDA_INTEROP_SUPPORT) | ||
find_package(CUDA REQUIRED) | ||
set(CUDA_NVCC_FLAGS | ||
${CUDA_NVCC_FLAGS} | ||
"-gencode=arch=compute_35,code=sm_35" # Kepler | ||
"-gencode=arch=compute_50,code=sm_50" # Maxwell | ||
"-gencode=arch=compute_52,code=sm_52" # Maxwell | ||
"-gencode=arch=compute_61,code=sm_61" # Pascal | ||
"--expt-extended-lambda") | ||
import_library(cuda CUDA_INCLUDE_DIRS CUDA_LIBRARIES) | ||
endif() | ||
|
||
################################################## Targets ################################################## | ||
add_library(${PROJECT_NAME} ${PROJECT_SOURCES}) | ||
target_include_directories(${PROJECT_NAME} PUBLIC | ||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | ||
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> | ||
$<INSTALL_INTERFACE:include> PRIVATE source) | ||
target_link_libraries(${PROJECT_NAME} PUBLIC ${PROJECT_LIBRARIES}) | ||
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX) | ||
|
||
string(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER) | ||
if(NOT BUILD_SHARED_LIBS) | ||
set(DEFINITIONS "${DEFINITIONS} -D${PROJECT_NAME_UPPER}_STATIC") | ||
endif() | ||
if(CUDA_INTEROP_SUPPORT) | ||
set(DEFINITIONS "${DEFINITIONS} -D${PROJECT_NAME_UPPER}_CUDA_INTEROP_SUPPORT") | ||
endif() | ||
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${DEFINITIONS}") | ||
|
||
################################################## Postbuild ################################################## | ||
include (GenerateExportHeader) | ||
string (TOUPPER ${PROJECT_NAME} PROJECT_NAME_UPPER) | ||
generate_export_header(${PROJECT_NAME} | ||
EXPORT_FILE_NAME export.hpp | ||
EXPORT_MACRO_NAME ${PROJECT_NAME_UPPER}_EXPORT | ||
STATIC_DEFINE ${PROJECT_NAME_UPPER}_STATIC | ||
) | ||
|
||
################################################## Testing ################################################## | ||
if(BUILD_TESTS) | ||
enable_testing() | ||
|
||
set(PROJECT_TEST_SOURCES | ||
|
||
) | ||
|
||
foreach(_SOURCE ${PROJECT_TEST_SOURCES}) | ||
get_filename_component(_NAME ${_SOURCE} NAME_WE) | ||
set (_SOURCES tests/catch.hpp tests/main.cpp ${_SOURCE}) | ||
add_executable (${_NAME} ${_SOURCES}) | ||
target_link_libraries (${_NAME} ${PROJECT_NAME}) | ||
add_test (${_NAME} ${_NAME}) | ||
set_property (TARGET ${_NAME} PROPERTY FOLDER "Tests") | ||
source_group ("source" FILES ${_SOURCES}) | ||
endforeach() | ||
endif() | ||
|
||
################################################## Installation ################################################## | ||
install(TARGETS ${PROJECT_NAME} EXPORT "${PROJECT_NAME}-config" | ||
ARCHIVE DESTINATION lib | ||
LIBRARY DESTINATION lib | ||
RUNTIME DESTINATION bin) | ||
install(DIRECTORY include/ DESTINATION include) | ||
install(FILES "${PROJECT_BINARY_DIR}/export.hpp" DESTINATION "include/${PROJECT_NAME}") | ||
install(EXPORT "${PROJECT_NAME}-config" DESTINATION "cmake") | ||
export (TARGETS "${PROJECT_NAME}" FILE "${PROJECT_NAME}-config.cmake") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Assigns the given files to source groups identical to their location. | ||
function(assign_source_group) | ||
foreach(_SOURCE IN ITEMS ${ARGN}) | ||
if (IS_ABSOLUTE "${_SOURCE}") | ||
file(RELATIVE_PATH _SOURCE_REL "${CMAKE_CURRENT_SOURCE_DIR}" "${_SOURCE}") | ||
else() | ||
set(_SOURCE_REL "${_SOURCE}") | ||
endif() | ||
get_filename_component(_SOURCE_PATH "${_SOURCE_REL}" PATH) | ||
if(WIN32) | ||
string(REPLACE "/" "\\" _SOURCE_PATH_MSVC "${_SOURCE_PATH}") | ||
source_group("${_SOURCE_PATH_MSVC}" FILES "${_SOURCE}") | ||
else() | ||
source_group("${_SOURCE_PATH}" FILES "${_SOURCE}") | ||
endif() | ||
endforeach() | ||
endfunction(assign_source_group) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# Imports a library which is not built with cmake. | ||
# The imported library is appended to the PROJECT_LIBRARIES variable. | ||
# Usage: | ||
# Header Only: | ||
# import_library(ALIAS INCLUDE_DIRS) | ||
# Identical Debug and Release: | ||
# import_library(ALIAS INCLUDE_DIRS LIBRARIES) | ||
# Separate Debug and Release: | ||
# import_library(ALIAS INCLUDE_DIRS DEBUG_LIBRARIES RELEASE_LIBRARIES) | ||
function(import_library ALIAS INCLUDE_DIRS) | ||
set(ALIAS ${PROJECT_NAME}::${ALIAS}) | ||
add_library(${ALIAS} INTERFACE IMPORTED) | ||
set_property(TARGET ${ALIAS} PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${${INCLUDE_DIRS}}) | ||
|
||
set (_EXTRA_ARGS ${ARGN}) | ||
list(LENGTH _EXTRA_ARGS _EXTRA_ARGS_LENGTH) | ||
if (_EXTRA_ARGS_LENGTH EQUAL 1) | ||
list (GET _EXTRA_ARGS 0 _LIBRARIES) | ||
set_property(TARGET ${ALIAS} PROPERTY INTERFACE_LINK_LIBRARIES ${${_LIBRARIES}}) | ||
elseif(_EXTRA_ARGS_LENGTH EQUAL 2) | ||
list (GET _EXTRA_ARGS 0 _DEBUG_LIBRARIES ) | ||
list (GET _EXTRA_ARGS 1 _RELEASE_LIBRARIES) | ||
set_property(TARGET ${ALIAS} PROPERTY INTERFACE_LINK_LIBRARIES | ||
$<$<CONFIG:Debug>:${${_DEBUG_LIBRARIES}}> | ||
$<$<NOT:$<CONFIG:Debug>>:${${_RELEASE_LIBRARIES}}>) | ||
endif () | ||
|
||
set(PROJECT_LIBRARIES ${PROJECT_LIBRARIES} ${ALIAS} PARENT_SCOPE) | ||
endfunction(import_library) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Copyright Ali Can Demiralp 2016 - 2017. | ||
// Distributed under the Boost Software License, Version 1.0. | ||
// (See accompanying file LICENSE_1_0.txt or copy at | ||
// http://www.boost.org/LICENSE_1_0.txt) | ||
|
||
#ifndef GL_ALL_HPP_ | ||
#define GL_ALL_HPP_ | ||
|
||
// 2.3 Command execution. | ||
#include <gl/command_execution.hpp> | ||
// 4.1 Sync objects (uncopyable). | ||
#include <gl/sync.hpp> | ||
// 4.2, 4.3 Asynchronous and timer queries (uncopyable). | ||
#include <gl/query.hpp> | ||
// 6.0 Buffer objects. | ||
#include <gl/buffer.hpp> | ||
// 7.1 Shader objects (uncopyable). | ||
#include <gl/shader.hpp> | ||
// 7.3 Program objects (uncopyable). | ||
#include <gl/program.hpp> | ||
// TODO 7.4 Program pipeline objects. | ||
#include <gl/pipeline.hpp> | ||
// 8.1 Texture objects (uncopyable). | ||
#include <gl/texture.hpp> | ||
// 8.2 Sampler objects. | ||
#include <gl/sampler.hpp> | ||
// TODO 8.18 Texture views. | ||
#include <gl/texture_view.hpp> | ||
// 9.0 Framebuffer objects (uncopyable). | ||
#include <gl/framebuffer.hpp> | ||
// 9.2.4 Renderbuffer objects. | ||
#include <gl/renderbuffer.hpp> | ||
// 10.1.15, 11.2.2 Tessellation. | ||
#include <gl/tessellation.hpp> | ||
// 10.3 Vertex array objects (uncopyable). | ||
#include <gl/vertex_array.hpp> | ||
// 10.4 Drawing commands. | ||
#include <gl/draw_commands.hpp> | ||
// 13.0 Vertex post processing. | ||
#include <gl/vertex_post_processing_ops.hpp> | ||
// 13.2 Transform feedback. | ||
#include <gl/transform_feedback.hpp> | ||
// 13.6 Controlling viewport. | ||
#include <gl/viewport.hpp> | ||
// 14.0 Rasterization. | ||
#include <gl/rasterization.hpp> | ||
// 17.0 Per-fragment operations. | ||
#include <gl/per_fragment_ops.hpp> | ||
// 19.0 Compute shaders. | ||
#include <gl/compute.hpp> | ||
// 20.0 Debug. | ||
#include <gl/debug.hpp> | ||
// TODO 22.0 State and state requests. | ||
#include <gl/state.hpp> | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// Copyright Ali Can Demiralp 2016 - 2017. | ||
// Distributed under the Boost Software License, Version 1.0. | ||
// (See accompanying file LICENSE_1_0.txt or copy at | ||
// http://www.boost.org/LICENSE_1_0.txt) | ||
|
||
#ifndef GL_AUXILIARY_GLM_UNIFORMS_HPP_ | ||
#define GL_AUXILIARY_GLM_UNIFORMS_HPP_ | ||
|
||
#include <glm/glm.hpp> | ||
#include <glm/gtc/type_ptr.hpp> | ||
|
||
#include <gl/program.hpp> | ||
|
||
namespace gl | ||
{ | ||
#define SPECIALIZE_SET_UNIFORM_VECTORS(TYPE, GL_POSTFIX) \ | ||
template <> \ | ||
inline void program::set_uniform (GLint location, const TYPE& value) \ | ||
{ \ | ||
glProgramUniform##GL_POSTFIX##v(id_, location, 1, glm::value_ptr(value)); \ | ||
} \ | ||
template <> \ | ||
inline void program::set_uniform_vector (GLint location, const std::vector<TYPE>& values) \ | ||
{ \ | ||
glProgramUniform##GL_POSTFIX##v(id_, location, (GLsizei) values.size(), glm::value_ptr(values[0])); \ | ||
} \ | ||
|
||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::ivec2, 2i ) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::ivec3, 3i ) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::ivec4, 4i ) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::uvec2, 2ui) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::uvec3, 3ui) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::uvec4, 4ui) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::fvec2, 2f ) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::fvec3, 3f ) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::fvec4, 4f ) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::dvec2, 2d ) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::dvec3, 3d ) | ||
SPECIALIZE_SET_UNIFORM_VECTORS(glm::dvec4, 4d ) | ||
#undef SPECIALIZE_SET_UNIFORM_VECTORS | ||
|
||
#define SPECIALIZE_SET_UNIFORM_MATRICES(TYPE, GL_POSTFIX) \ | ||
template <> \ | ||
inline void program::set_uniform (GLint location, const TYPE& value) \ | ||
{ \ | ||
glProgramUniformMatrix##GL_POSTFIX##v(id_, location, 1, GL_FALSE, glm::value_ptr(value)); \ | ||
} \ | ||
template <> \ | ||
inline void program::set_uniform_vector(GLint location, const std::vector<TYPE>& values) \ | ||
{ \ | ||
glProgramUniformMatrix##GL_POSTFIX##v(id_, location, (GLsizei) values.size(), GL_FALSE, glm::value_ptr(values[0])); \ | ||
} \ | ||
|
||
SPECIALIZE_SET_UNIFORM_MATRICES(glm::fmat2, 2f) | ||
SPECIALIZE_SET_UNIFORM_MATRICES(glm::fmat3, 3f) | ||
SPECIALIZE_SET_UNIFORM_MATRICES(glm::fmat4, 4f) | ||
SPECIALIZE_SET_UNIFORM_MATRICES(glm::dmat2, 2d) | ||
SPECIALIZE_SET_UNIFORM_MATRICES(glm::dmat3, 3d) | ||
SPECIALIZE_SET_UNIFORM_MATRICES(glm::dmat4, 4d) | ||
#undef SPECIALIZE_SET_UNIFORM_MATRICES | ||
} | ||
|
||
#endif |
Oops, something went wrong.