// ======================================================================== // // Copyright 2009-2014 Intel Corporation // // // // Licensed under the Apache License, Version 2.0 (the "License"); // // you may not use this file except in compliance with the License. // // You may obtain a copy of the License at // // // // http://www.apache.org/licenses/LICENSE-2.0 // // // // Unless required by applicable law or agreed to in writing, software // // distributed under the License is distributed on an "AS IS" BASIS, // // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // // See the License for the specific language governing permissions and // // limitations under the License. // // ======================================================================== // #include "../common/tutorial/tutorial_device.h" /* configuration */ #if defined(__XEON_PHI__) #define EDGE_LEVEL 64.0f #else #define EDGE_LEVEL 256.0f #endif /* scene data */ RTCScene g_scene = NULL; /* render function to use */ renderPixelFunc renderPixel; /* previous camera position */ Vec3fa old_p; /* error reporting function */ void error_handler(const RTCError code, const int8* str) { printf("Embree: "); switch (code) { case RTC_UNKNOWN_ERROR : printf("RTC_UNKNOWN_ERROR"); break; case RTC_INVALID_ARGUMENT : printf("RTC_INVALID_ARGUMENT"); break; case RTC_INVALID_OPERATION: printf("RTC_INVALID_OPERATION"); break; case RTC_OUT_OF_MEMORY : printf("RTC_OUT_OF_MEMORY"); break; case RTC_UNSUPPORTED_CPU : printf("RTC_UNSUPPORTED_CPU"); break; default : printf("invalid error code"); break; } if (str) { printf(" ("); while (*str) putchar(*str++); printf(")\n"); } abort(); } /* rtcCommitThread called by all ISPC worker threads to enable parallel build */ #if defined(PARALLEL_COMMIT) task void parallelCommit(RTCScene scene) { rtcCommitThread (scene,threadIndex,threadCount); } #endif float cube_vertices[8][4] = { { -1.0f, -1.0f, -1.0f, 0.0f }, { 1.0f, -1.0f, -1.0f, 0.0f }, { 1.0f, -1.0f, 1.0f, 0.0f }, { -1.0f, -1.0f, 1.0f, 0.0f }, { -1.0f, 1.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, -1.0f, 0.0f }, { 1.0f, 1.0f, 1.0f, 0.0f }, { -1.0f, 1.0f, 1.0f, 0.0f } }; #if 1 #define NUM_INDICES 24 #define NUM_FACES 6 #define FACE_SIZE 4 unsigned int cube_indices[24] = { 0, 1, 5, 4, 1, 2, 6, 5, 2, 3, 7, 6, 0, 4, 7, 3, 4, 5, 6, 7, 0, 3, 2, 1, }; unsigned int cube_faces[6] = { 4, 4, 4, 4, 4, 4 }; #else #define NUM_INDICES 36 #define NUM_FACES 12 #define FACE_SIZE 3 unsigned int cube_indices[36] = { 1, 5, 4, 0, 1, 4, 2, 6, 5, 1, 2, 5, 3, 7, 6, 2, 3, 6, 4, 7, 3, 0, 4, 3, 5, 6, 7, 4, 5, 7, 3, 2, 1, 0, 3, 1 }; unsigned int cube_faces[12] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; #endif void displacementFunction(void* ptr, unsigned int geomID, int unsigned primID, const float* u, /*!< u coordinates (source) */ const float* v, /*!< v coordinates (source) */ const float* nx, /*!< x coordinates of normal at point to displace (source) */ const float* ny, /*!< y coordinates of normal at point to displace (source) */ const float* nz, /*!< z coordinates of normal at point to displace (source) */ float* px, /*!< x coordinates of points to displace (source and target) */ float* py, /*!< y coordinates of points to displace (source and target) */ float* pz, /*!< z coordinates of points to displace (source and target) */ size_t N) { for (size_t i = 0; i