mirror of
https://github.com/PixarAnimationStudios/OpenSubdiv
synced 2024-11-26 21:40:07 +00:00
83486cddae
- Added GLSL patch shaders for BoxSplineTriangle and GregoryTriangle patches. These both convert to a hybrid Bezier patch for drawing similar to the basis conversion done for quad patches. - Added evaluation of hybrid Bezier triangle patches and GregoryTriangle patches to the common shader source. - Added OsdGetPatchIsTriangleRotated() to detect rotated triangles. - Added OsdInterpolatePatchCoordTriangle() for eval of triangle patches. - Added boundary point extrapolation for BoxSplineTriangle patches. - Fixed boundary point extrapolation for unisolated BSpline patches. - Added tess factor and tess evaluation location computation for triangle patches. - Limit surface edge mid points for both quad and triangle patches are now computed directly.
418 lines
10 KiB
CMake
Executable File
418 lines
10 KiB
CMake
Executable File
#
|
|
# Copyright 2013 Pixar
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
# with the following modification; you may not use this file except in
|
|
# compliance with the Apache License and the following modification to it:
|
|
# Section 6. Trademarks. is deleted and replaced with:
|
|
#
|
|
# 6. Trademarks. This License does not grant permission to use the trade
|
|
# names, trademarks, service marks, or product names of the Licensor
|
|
# and its affiliates, except as required to comply with Section 4(c) of
|
|
# the License and to reproduce the content of the NOTICE file.
|
|
#
|
|
# You may obtain a copy of the Apache License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the Apache License with the above modification is
|
|
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the Apache License for the specific
|
|
# language governing permissions and limitations under the Apache License.
|
|
#
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# source & headers
|
|
set(CPU_SOURCE_FILES
|
|
cpuEvaluator.cpp
|
|
cpuKernel.cpp
|
|
cpuPatchTable.cpp
|
|
cpuVertexBuffer.cpp
|
|
)
|
|
|
|
set(GPU_SOURCE_FILES )
|
|
|
|
set(INC_FILES )
|
|
|
|
set(PRIVATE_HEADER_FILES
|
|
cpuKernel.h
|
|
)
|
|
|
|
set(PUBLIC_HEADER_FILES
|
|
bufferDescriptor.h
|
|
cpuEvaluator.h
|
|
cpuPatchTable.h
|
|
cpuVertexBuffer.h
|
|
mesh.h
|
|
nonCopyable.h
|
|
opengl.h
|
|
types.h
|
|
)
|
|
|
|
list(APPEND KERNEL_FILES
|
|
patchBasisCommonTypes.h
|
|
patchBasisCommon.h
|
|
patchBasisCommonEval.h
|
|
)
|
|
|
|
set(DOXY_HEADER_FILES ${PUBLIC_HEADER_FILES})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
set(OPENMP_PUBLIC_HEADERS
|
|
ompEvaluator.h
|
|
ompKernel.h
|
|
)
|
|
|
|
if(OPENMP_FOUND )
|
|
list(APPEND CPU_SOURCE_FILES
|
|
ompEvaluator.cpp
|
|
ompKernel.cpp
|
|
)
|
|
|
|
list(APPEND PUBLIC_HEADER_FILES ${OPENMP_PUBLIC_HEADERS})
|
|
|
|
if (CMAKE_COMPILER_IS_GNUCXX)
|
|
list(APPEND PLATFORM_CPU_LIBRARIES gomp)
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${OPENMP_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
set(TBB_PUBLIC_HEADERS
|
|
tbbEvaluator.h
|
|
tbbKernel.h
|
|
)
|
|
|
|
if( TBB_FOUND )
|
|
include_directories("${TBB_INCLUDE_DIR}")
|
|
|
|
list(APPEND CPU_SOURCE_FILES
|
|
tbbEvaluator.cpp
|
|
tbbKernel.cpp
|
|
)
|
|
|
|
list(APPEND PUBLIC_HEADER_FILES ${TBB_PUBLIC_HEADERS})
|
|
|
|
if (CMAKE_COMPILER_IS_GNUCXX)
|
|
list(APPEND PLATFORM_CPU_LIBRARIES gomp)
|
|
endif()
|
|
|
|
list(APPEND PLATFORM_CPU_LIBRARIES
|
|
${TBB_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${TBB_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# GL code & dependencies
|
|
set(GL_PUBLIC_HEADERS
|
|
cpuGLVertexBuffer.h
|
|
glLegacyGregoryPatchTable.h
|
|
glPatchTable.h
|
|
glVertexBuffer.h
|
|
glMesh.h
|
|
glslPatchShaderSource.h
|
|
)
|
|
|
|
if( (NOT NO_OPENGL) AND (OPENGL_FOUND OR OPENGLES_FOUND) )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cpuGLVertexBuffer.cpp
|
|
glLegacyGregoryPatchTable.cpp
|
|
glPatchTable.cpp
|
|
glVertexBuffer.cpp
|
|
glslPatchShaderSource.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${GL_PUBLIC_HEADERS})
|
|
if ( OPENGL_FOUND )
|
|
list(APPEND KERNEL_FILES
|
|
glslPatchCommon.glsl
|
|
glslPatchCommonTess.glsl
|
|
glslPatchBoxSplineTriangle.glsl
|
|
glslPatchBSpline.glsl
|
|
glslPatchGregory.glsl
|
|
glslPatchGregoryBasis.glsl
|
|
glslPatchGregoryTriangle.glsl
|
|
glslPatchLegacy.glsl
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${GL_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# OpenGL 4.2 dependencies
|
|
# note : (GLSL transform feedback kernels require GL 4.2)
|
|
set(GL_4_2_PUBLIC_HEADERS
|
|
glXFBEvaluator.h
|
|
)
|
|
|
|
if( OPENGL_4_2_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
glXFBEvaluator.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${GL_4_2_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
glslXFBKernel.glsl
|
|
)
|
|
list(APPEND PLATFORM_GPU_LIBRARIES
|
|
${GLEW_LIBRARY}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${GL_4_2_PUBLIC_HEADERS})
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# OpenGL 4.3 dependencies
|
|
# note : (GLSL compute shader kernels require GL 4.3)
|
|
set(GL_4_3_PUBLIC_HEADERS
|
|
glComputeEvaluator.h
|
|
)
|
|
|
|
if( OPENGL_4_3_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
glComputeEvaluator.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${GL_4_3_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
glslComputeKernel.glsl
|
|
)
|
|
list(APPEND PLATFORM_GPU_LIBRARIES
|
|
${GLEW_LIBRARY}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${GL_4_3_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# DX11 code & dependencies
|
|
set(DXSDK_PUBLIC_HEADERS
|
|
cpuD3D11VertexBuffer.h
|
|
d3d11ComputeEvaluator.h
|
|
d3d11LegacyGregoryPatchTable.h
|
|
d3d11PatchTable.h
|
|
d3d11VertexBuffer.h
|
|
d3d11Mesh.h
|
|
hlslPatchShaderSource.h
|
|
)
|
|
if( DXSDK_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cpuD3D11VertexBuffer.cpp
|
|
d3d11ComputeEvaluator.cpp
|
|
d3d11LegacyGregoryPatchTable.cpp
|
|
d3d11PatchTable.cpp
|
|
d3d11VertexBuffer.cpp
|
|
hlslPatchShaderSource.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${DXSDK_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
hlslComputeKernel.hlsl
|
|
hlslPatchCommon.hlsl
|
|
hlslPatchBSpline.hlsl
|
|
hlslPatchGregory.hlsl
|
|
hlslPatchGregoryBasis.hlsl
|
|
)
|
|
list(APPEND PLATFORM_GPU_LIBRARIES
|
|
${DXSDK_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${DXSDK_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Metal code & dependencies
|
|
set(METAL_PUBLIC_HEADERS
|
|
mtlVertexBuffer.h
|
|
mtlComputeEvaluator.h
|
|
mtlLegacyGregoryPatchTable.h
|
|
mtlPatchTable.h
|
|
mtlMesh.h
|
|
mtlPatchShaderSource.h
|
|
mtlCommon.h
|
|
)
|
|
|
|
|
|
if( METAL_FOUND )
|
|
set(METAL_SOURCE_FILES
|
|
mtlVertexBuffer.mm
|
|
mtlComputeEvaluator.mm
|
|
mtlLegacyGregoryPatchTable.mm
|
|
mtlPatchTable.mm
|
|
mtlVertexBuffer.mm
|
|
mtlPatchShaderSource.mm
|
|
)
|
|
|
|
set_source_files_properties(
|
|
${METAL_SOURCE_FILES}
|
|
PROPERTIES
|
|
COMPILE_FLAGS
|
|
"-fobjc-arc")
|
|
|
|
list(APPEND GPU_SOURCE_FILES ${METAL_SOURCE_FILES})
|
|
|
|
|
|
|
|
list(APPEND PUBLIC_HEADER_FILES ${METAL_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
mtlComputeKernel.metal
|
|
mtlPatchCommon.metal
|
|
mtlPatchBSpline.metal
|
|
mtlPatchGregory.metal
|
|
mtlPatchGregoryBasis.metal
|
|
)
|
|
list(APPEND PLATFORM_GPU_LIBRARIES
|
|
${METAL_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${METAL_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# OpenCL code & dependencies
|
|
set(OPENCL_PUBLIC_HEADERS
|
|
clEvaluator.h
|
|
clPatchTable.h
|
|
clVertexBuffer.h
|
|
opencl.h
|
|
)
|
|
|
|
if ( OPENCL_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
clEvaluator.cpp
|
|
clPatchTable.cpp
|
|
clVertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${OPENCL_PUBLIC_HEADERS})
|
|
list(APPEND KERNEL_FILES
|
|
clKernel.cl
|
|
)
|
|
list(APPEND PLATFORM_GPU_LIBRARIES
|
|
${OPENCL_LIBRARIES}
|
|
)
|
|
include_directories( "${OPENCL_INCLUDE_DIRS}" )
|
|
if ( OPENGL_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES clGLVertexBuffer.cpp)
|
|
list(APPEND PUBLIC_HEADER_FILES clGLVertexBuffer.h)
|
|
endif()
|
|
|
|
if ( OPENCL_D3D11_INTEROP_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
clD3D11VertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES
|
|
clD3D11VertexBuffer.h
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${OPENCL_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# CUDA code & dependencies
|
|
set(CUDA_PUBLIC_HEADERS
|
|
cudaEvaluator.h
|
|
cudaPatchTable.h
|
|
cudaVertexBuffer.h
|
|
)
|
|
|
|
if( CUDA_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cudaEvaluator.cpp
|
|
cudaPatchTable.cpp
|
|
cudaVertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES ${CUDA_PUBLIC_HEADERS})
|
|
list(APPEND CUDA_KERNEL_FILES
|
|
osd/cudaKernel.cu
|
|
)
|
|
set (CUDA_KERNEL_FILES ${CUDA_KERNEL_FILES} PARENT_SCOPE)
|
|
if ( OPENGL_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cudaGLVertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES
|
|
cudaGLVertexBuffer.h
|
|
)
|
|
endif()
|
|
|
|
if( DXSDK_FOUND )
|
|
list(APPEND GPU_SOURCE_FILES
|
|
cudaD3D11VertexBuffer.cpp
|
|
)
|
|
list(APPEND PUBLIC_HEADER_FILES
|
|
cudaD3D11VertexBuffer.h
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
list(APPEND DOXY_HEADER_FILES ${CUDA_PUBLIC_HEADERS})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
_stringify("${KERNEL_FILES}" INC_FILES)
|
|
|
|
include_directories("${CMAKE_CURRENT_BINARY_DIR}")
|
|
|
|
#-------------------------------------------------------------------------------
|
|
source_group("Kernels" FILES ${KERNEL_FILES})
|
|
|
|
source_group("Inc" FILES ${INC_FILES})
|
|
|
|
# Compile objs first for both the CPU and GPU libs -----
|
|
add_library(osd_cpu_obj
|
|
OBJECT
|
|
${CPU_SOURCE_FILES}
|
|
${PRIVATE_HEADER_FILES}
|
|
${PUBLIC_HEADER_FILES}
|
|
)
|
|
|
|
set_target_properties(osd_cpu_obj
|
|
PROPERTIES
|
|
FOLDER "opensubdiv"
|
|
)
|
|
|
|
if( GPU_SOURCE_FILES )
|
|
add_library(osd_gpu_obj
|
|
OBJECT
|
|
${GPU_SOURCE_FILES}
|
|
${PRIVATE_HEADER_FILES}
|
|
${PUBLIC_HEADER_FILES}
|
|
${INC_FILES}
|
|
)
|
|
set_target_properties(osd_gpu_obj
|
|
PROPERTIES
|
|
FOLDER "opensubdiv"
|
|
)
|
|
endif()
|
|
|
|
_add_doxy_headers( "${DOXY_HEADER_FILES}" )
|
|
|
|
install(
|
|
FILES
|
|
${PUBLIC_HEADER_FILES}
|
|
DESTINATION
|
|
"${CMAKE_INCDIR_BASE}/osd"
|
|
PERMISSIONS
|
|
OWNER_READ
|
|
GROUP_READ
|
|
WORLD_READ )
|
|
|
|
if (ANDROID)
|
|
install(
|
|
FILES
|
|
Android.mk
|
|
DESTINATION
|
|
"${LIBRARY_OUTPUT_PATH_ROOT}"
|
|
PERMISSIONS
|
|
OWNER_READ
|
|
GROUP_READ
|
|
WORLD_READ )
|
|
endif()
|
|
|
|
#-------------------------------------------------------------------------------
|