summaryrefslogtreecommitdiff
path: root/libs/assimp/samples/SimpleOpenGL
diff options
context:
space:
mode:
Diffstat (limited to 'libs/assimp/samples/SimpleOpenGL')
-rw-r--r--libs/assimp/samples/SimpleOpenGL/CMakeLists.txt58
-rw-r--r--libs/assimp/samples/SimpleOpenGL/Sample_SimpleOpenGL.c448
-rw-r--r--libs/assimp/samples/SimpleOpenGL/SimpleOpenGL.sln20
-rw-r--r--libs/assimp/samples/SimpleOpenGL/SimpleOpenGL.vcproj199
4 files changed, 725 insertions, 0 deletions
diff --git a/libs/assimp/samples/SimpleOpenGL/CMakeLists.txt b/libs/assimp/samples/SimpleOpenGL/CMakeLists.txt
new file mode 100644
index 0000000..ba5deb4
--- /dev/null
+++ b/libs/assimp/samples/SimpleOpenGL/CMakeLists.txt
@@ -0,0 +1,58 @@
+SET(SAMPLE_PROJECT_NAME assimp_simpleogl)
+
+FIND_PACKAGE(OpenGL)
+FIND_PACKAGE(GLUT)
+IF ( MSVC )
+ SET(M_LIB)
+ELSE ()
+ find_library(M_LIB m)
+ENDIF ()
+
+IF ( NOT GLUT_FOUND )
+ IF ( MSVC )
+ SET ( GLUT_FOUND 1 )
+ SET ( GLUT_INCLUDE_DIR ${Assimp_SOURCE_DIR}/samples/freeglut/ )
+ SET ( GLUT_LIBRARIES ${Assimp_SOURCE_DIR}/samples/freeglut/lib/freeglut.lib )
+ ELSE ()
+ MESSAGE( WARNING "Please install glut." )
+ ENDIF ()
+ENDIF ()
+
+# Used for usage and error messages in the program.
+ADD_COMPILE_DEFINITIONS(ASSIMP_VERSION="${ASSIMP_VERSION}")
+ADD_COMPILE_DEFINITIONS(PROJECT_NAME="${SAMPLE_PROJECT_NAME}")
+
+if ( MSVC )
+ ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
+ ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
+endif ()
+
+INCLUDE_DIRECTORIES(
+ ${Assimp_SOURCE_DIR}/include
+ ${Assimp_SOURCE_DIR}/code
+ ${OPENGL_INCLUDE_DIR}
+ ${GLUT_INCLUDE_DIR}
+ ${Assimp_SOURCE_DIR}/samples/freeglut/include
+)
+
+LINK_DIRECTORIES(
+ ${Assimp_BINARY_DIR}
+ ${Assimp_BINARY_DIR}/lib
+)
+
+ADD_EXECUTABLE( ${SAMPLE_PROJECT_NAME}
+ Sample_SimpleOpenGL.c
+)
+
+TARGET_USE_COMMON_OUTPUT_DIRECTORY(${SAMPLE_PROJECT_NAME})
+
+SET_PROPERTY(TARGET ${SAMPLE_PROJECT_NAME} PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
+
+TARGET_LINK_LIBRARIES( ${SAMPLE_PROJECT_NAME} assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${M_LIB} )
+SET_TARGET_PROPERTIES( ${SAMPLE_PROJECT_NAME} PROPERTIES
+ OUTPUT_NAME ${SAMPLE_PROJECT_NAME}
+)
+
+INSTALL( TARGETS ${SAMPLE_PROJECT_NAME}
+ DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
+)
diff --git a/libs/assimp/samples/SimpleOpenGL/Sample_SimpleOpenGL.c b/libs/assimp/samples/SimpleOpenGL/Sample_SimpleOpenGL.c
new file mode 100644
index 0000000..c8ab7b3
--- /dev/null
+++ b/libs/assimp/samples/SimpleOpenGL/Sample_SimpleOpenGL.c
@@ -0,0 +1,448 @@
+/* ----------------------------------------------------------------------------
+// Simple sample to prove that Assimp is easy to use with OpenGL.
+// It takes a file name as command line parameter, loads it using standard
+// settings and displays it.
+//
+// If you intend to _use_ this code sample in your app, do yourself a favour
+// and replace immediate mode calls with VBOs ...
+//
+// The vc8 solution links against assimp-release-dll_win32 - be sure to
+// have this configuration built.
+// ----------------------------------------------------------------------------
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifdef __APPLE__
+#include <freeglut.h>
+#else
+#include <GL/freeglut.h>
+#endif
+
+/* assimp include files. These three are usually needed. */
+#include <assimp/cimport.h>
+#include <assimp/scene.h>
+#include <assimp/postprocess.h>
+
+#define COMMAND_USAGE "--usage"
+
+/* ---------------------------------------------------------------------------- */
+inline static void print_run_command(const char* command_name) {
+ printf("Run '%s %s' for more information.\n",
+ PROJECT_NAME, command_name);
+}
+
+/* ---------------------------------------------------------------------------- */
+inline static void print_error(const char* msg) {
+ printf("ERROR: %s\n", msg);
+}
+
+#define NEW_LINE "\n"
+#define DOUBLE_NEW_LINE NEW_LINE NEW_LINE
+
+/* ---------------------------------------------------------------------------- */
+inline static void print_usage() {
+ static const char* usage_format =
+ "Usage: "
+ PROJECT_NAME
+ " <file>" DOUBLE_NEW_LINE
+ "where:" DOUBLE_NEW_LINE
+ " %-10s %s" DOUBLE_NEW_LINE
+ "options:" DOUBLE_NEW_LINE
+ " %-10s %s" DOUBLE_NEW_LINE;
+ printf(usage_format,
+ // where
+ "file", "The input model file to load.",
+ // options
+ COMMAND_USAGE, "Display usage.");
+}
+
+/* the global Assimp scene object */
+const C_STRUCT aiScene* scene = NULL;
+GLuint scene_list = 0;
+C_STRUCT aiVector3D scene_min, scene_max, scene_center;
+
+/* current rotation angle */
+static float angle = 0.f;
+
+#define aisgl_min(x,y) (x<y?x:y)
+#define aisgl_max(x,y) (y>x?y:x)
+
+/* ---------------------------------------------------------------------------- */
+void reshape(int width, int height)
+{
+ const double aspectRatio = (float) width / height, fieldOfView = 45.0;
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(fieldOfView, aspectRatio,
+ 1.0, 1000.0); /* Znear and Zfar */
+ glViewport(0, 0, width, height);
+}
+
+/* ---------------------------------------------------------------------------- */
+void get_bounding_box_for_node (const C_STRUCT aiNode* nd,
+ C_STRUCT aiVector3D* min,
+ C_STRUCT aiVector3D* max,
+ C_STRUCT aiMatrix4x4* trafo
+){
+ C_STRUCT aiMatrix4x4 prev;
+ unsigned int n = 0, t;
+
+ prev = *trafo;
+ aiMultiplyMatrix4(trafo,&nd->mTransformation);
+
+ for (; n < nd->mNumMeshes; ++n) {
+ const C_STRUCT aiMesh* mesh = scene->mMeshes[nd->mMeshes[n]];
+ for (t = 0; t < mesh->mNumVertices; ++t) {
+
+ C_STRUCT aiVector3D tmp = mesh->mVertices[t];
+ aiTransformVecByMatrix4(&tmp,trafo);
+
+ min->x = aisgl_min(min->x,tmp.x);
+ min->y = aisgl_min(min->y,tmp.y);
+ min->z = aisgl_min(min->z,tmp.z);
+
+ max->x = aisgl_max(max->x,tmp.x);
+ max->y = aisgl_max(max->y,tmp.y);
+ max->z = aisgl_max(max->z,tmp.z);
+ }
+ }
+
+ for (n = 0; n < nd->mNumChildren; ++n) {
+ get_bounding_box_for_node(nd->mChildren[n],min,max,trafo);
+ }
+ *trafo = prev;
+}
+
+/* ---------------------------------------------------------------------------- */
+void get_bounding_box(C_STRUCT aiVector3D* min, C_STRUCT aiVector3D* max)
+{
+ C_STRUCT aiMatrix4x4 trafo;
+ aiIdentityMatrix4(&trafo);
+
+ min->x = min->y = min->z = 1e10f;
+ max->x = max->y = max->z = -1e10f;
+ get_bounding_box_for_node(scene->mRootNode,min,max,&trafo);
+}
+
+/* ---------------------------------------------------------------------------- */
+void color4_to_float4(const C_STRUCT aiColor4D *c, float f[4])
+{
+ f[0] = c->r;
+ f[1] = c->g;
+ f[2] = c->b;
+ f[3] = c->a;
+}
+
+/* ---------------------------------------------------------------------------- */
+void set_float4(float f[4], float a, float b, float c, float d)
+{
+ f[0] = a;
+ f[1] = b;
+ f[2] = c;
+ f[3] = d;
+}
+
+/* ---------------------------------------------------------------------------- */
+void apply_material(const C_STRUCT aiMaterial *mtl)
+{
+ float c[4];
+
+ GLenum fill_mode;
+ int ret1, ret2;
+ C_STRUCT aiColor4D diffuse;
+ C_STRUCT aiColor4D specular;
+ C_STRUCT aiColor4D ambient;
+ C_STRUCT aiColor4D emission;
+ ai_real shininess, strength;
+ int two_sided;
+ int wireframe;
+ unsigned int max;
+
+ set_float4(c, 0.8f, 0.8f, 0.8f, 1.0f);
+ if(AI_SUCCESS == aiGetMaterialColor(mtl, AI_MATKEY_COLOR_DIFFUSE, &diffuse))
+ color4_to_float4(&diffuse, c);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, c);
+
+ set_float4(c, 0.0f, 0.0f, 0.0f, 1.0f);
+ if(AI_SUCCESS == aiGetMaterialColor(mtl, AI_MATKEY_COLOR_SPECULAR, &specular))
+ color4_to_float4(&specular, c);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, c);
+
+ set_float4(c, 0.2f, 0.2f, 0.2f, 1.0f);
+ if(AI_SUCCESS == aiGetMaterialColor(mtl, AI_MATKEY_COLOR_AMBIENT, &ambient))
+ color4_to_float4(&ambient, c);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, c);
+
+ set_float4(c, 0.0f, 0.0f, 0.0f, 1.0f);
+ if(AI_SUCCESS == aiGetMaterialColor(mtl, AI_MATKEY_COLOR_EMISSIVE, &emission))
+ color4_to_float4(&emission, c);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, c);
+
+ max = 1;
+ ret1 = aiGetMaterialFloatArray(mtl, AI_MATKEY_SHININESS, &shininess, &max);
+ if(ret1 == AI_SUCCESS) {
+ max = 1;
+ ret2 = aiGetMaterialFloatArray(mtl, AI_MATKEY_SHININESS_STRENGTH, &strength, &max);
+ if(ret2 == AI_SUCCESS)
+ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess * strength);
+ else
+ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
+ }
+ else {
+ glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0.0f);
+ set_float4(c, 0.0f, 0.0f, 0.0f, 0.0f);
+ glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, c);
+ }
+
+ max = 1;
+ if(AI_SUCCESS == aiGetMaterialIntegerArray(mtl, AI_MATKEY_ENABLE_WIREFRAME, &wireframe, &max))
+ fill_mode = wireframe ? GL_LINE : GL_FILL;
+ else
+ fill_mode = GL_FILL;
+ glPolygonMode(GL_FRONT_AND_BACK, fill_mode);
+
+ max = 1;
+ if((AI_SUCCESS == aiGetMaterialIntegerArray(mtl, AI_MATKEY_TWOSIDED, &two_sided, &max)) && two_sided)
+ glDisable(GL_CULL_FACE);
+ else
+ glEnable(GL_CULL_FACE);
+}
+
+/* ---------------------------------------------------------------------------- */
+void recursive_render (const C_STRUCT aiScene *sc, const C_STRUCT aiNode* nd)
+{
+ unsigned int i;
+ unsigned int n = 0, t;
+ C_STRUCT aiMatrix4x4 m = nd->mTransformation;
+
+ /* update transform */
+ aiTransposeMatrix4(&m);
+ glPushMatrix();
+ glMultMatrixf((float*)&m);
+
+ /* draw all meshes assigned to this node */
+ for (; n < nd->mNumMeshes; ++n) {
+ const C_STRUCT aiMesh* mesh = scene->mMeshes[nd->mMeshes[n]];
+
+ apply_material(sc->mMaterials[mesh->mMaterialIndex]);
+
+ if(mesh->mNormals == NULL) {
+ glDisable(GL_LIGHTING);
+ } else {
+ glEnable(GL_LIGHTING);
+ }
+
+ for (t = 0; t < mesh->mNumFaces; ++t) {
+ const C_STRUCT aiFace* face = &mesh->mFaces[t];
+ GLenum face_mode;
+
+ switch(face->mNumIndices) {
+ case 1: face_mode = GL_POINTS; break;
+ case 2: face_mode = GL_LINES; break;
+ case 3: face_mode = GL_TRIANGLES; break;
+ default: face_mode = GL_POLYGON; break;
+ }
+
+ glBegin(face_mode);
+
+ for(i = 0; i < face->mNumIndices; i++) {
+ int index = face->mIndices[i];
+ if(mesh->mColors[0] != NULL)
+ glColor4fv((GLfloat*)&mesh->mColors[0][index]);
+ if(mesh->mNormals != NULL)
+ glNormal3fv(&mesh->mNormals[index].x);
+ glVertex3fv(&mesh->mVertices[index].x);
+ }
+
+ glEnd();
+ }
+
+ }
+
+ /* draw all children */
+ for (n = 0; n < nd->mNumChildren; ++n) {
+ recursive_render(sc, nd->mChildren[n]);
+ }
+
+ glPopMatrix();
+}
+
+/* ---------------------------------------------------------------------------- */
+void do_motion (void)
+{
+ static GLint prev_time = 0;
+ static GLint prev_fps_time = 0;
+ static int frames = 0;
+
+ int time = glutGet(GLUT_ELAPSED_TIME);
+ angle += (float)((time-prev_time)*0.01);
+ prev_time = time;
+
+ frames += 1;
+ if ((time - prev_fps_time) > 1000) /* update every seconds */
+ {
+ int current_fps = frames * 1000 / (time - prev_fps_time);
+ printf("%d fps\n", current_fps);
+ frames = 0;
+ prev_fps_time = time;
+ }
+
+
+ glutPostRedisplay ();
+}
+
+/* ---------------------------------------------------------------------------- */
+void display(void)
+{
+ float tmp;
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ gluLookAt(0.f,0.f,3.f,0.f,0.f,-5.f,0.f,1.f,0.f);
+
+ /* rotate it around the y axis */
+ glRotatef(angle,0.f,1.f,0.f);
+
+ /* scale the whole asset to fit into our view frustum */
+ tmp = scene_max.x-scene_min.x;
+ tmp = aisgl_max(scene_max.y - scene_min.y,tmp);
+ tmp = aisgl_max(scene_max.z - scene_min.z,tmp);
+ tmp = 1.f / tmp;
+ glScalef(tmp, tmp, tmp);
+
+ /* center the model */
+ glTranslatef( -scene_center.x, -scene_center.y, -scene_center.z );
+
+ /* if the display list has not been made yet, create a new one and
+ fill it with scene contents */
+ if(scene_list == 0) {
+ scene_list = glGenLists(1);
+ glNewList(scene_list, GL_COMPILE);
+ /* now begin at the root node of the imported data and traverse
+ the scenegraph by multiplying subsequent local transforms
+ together on GL's matrix stack. */
+ recursive_render(scene, scene->mRootNode);
+ glEndList();
+ }
+
+ glCallList(scene_list);
+
+ glutSwapBuffers();
+
+ do_motion();
+}
+
+/* ---------------------------------------------------------------------------- */
+int loadasset (const char* path)
+{
+ /* we are taking one of the postprocessing presets to avoid
+ spelling out 20+ single postprocessing flags here. */
+ scene = aiImportFile(path,aiProcessPreset_TargetRealtime_MaxQuality);
+
+ if (scene) {
+ get_bounding_box(&scene_min,&scene_max);
+ scene_center.x = (scene_min.x + scene_max.x) / 2.0f;
+ scene_center.y = (scene_min.y + scene_max.y) / 2.0f;
+ scene_center.z = (scene_min.z + scene_max.z) / 2.0f;
+ return 0;
+ }
+ return 1;
+}
+
+/* ---------------------------------------------------------------------------- */
+int main(int argc, char **argv)
+{
+ const char* model_file = NULL;
+ C_STRUCT aiLogStream stream;
+
+ if (argc < 2) {
+ print_error("No input model file specified.");
+ print_run_command(COMMAND_USAGE);
+ return EXIT_FAILURE;
+ }
+
+ // Find and execute available commands entered by the user.
+ for (int i = 1; i < argc; ++i) {
+ if (!strncmp(argv[i], COMMAND_USAGE, strlen(COMMAND_USAGE))) {
+ print_usage();
+ return EXIT_SUCCESS;
+ }
+ }
+
+ // Check and validate the specified model file extension.
+ model_file = argv[1];
+ const char* extension = strrchr(model_file, '.');
+ if (!extension) {
+ print_error("Please provide a file with a valid extension.");
+ return EXIT_FAILURE;
+ }
+
+ if (AI_FALSE == aiIsExtensionSupported(extension)) {
+ print_error("The specified model file extension is currently "
+ "unsupported in Assimp " ASSIMP_VERSION ".");
+ return EXIT_FAILURE;
+ }
+
+ glutInitWindowSize(900,600);
+ glutInitWindowPosition(100,100);
+ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
+ glutInit(&argc, argv);
+ glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
+
+ glutCreateWindow("Assimp - Very simple OpenGL sample");
+ glutDisplayFunc(display);
+ glutReshapeFunc(reshape);
+
+ /* get a handle to the predefined STDOUT log stream and attach
+ it to the logging system. It remains active for all further
+ calls to aiImportFile(Ex) and aiApplyPostProcessing. */
+ stream = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT,NULL);
+ aiAttachLogStream(&stream);
+
+ /* ... same procedure, but this stream now writes the
+ log messages to assimp_log.txt */
+ stream = aiGetPredefinedLogStream(aiDefaultLogStream_FILE,"assimp_log.txt");
+ aiAttachLogStream(&stream);
+
+ // Load the model file.
+ if(0 != loadasset(model_file)) {
+ print_error("Failed to load model. Please ensure that the specified file exists.");
+ aiDetachAllLogStreams();
+ return EXIT_FAILURE;
+ }
+
+ glClearColor(0.1f,0.1f,0.1f,1.f);
+
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0); /* Uses default lighting parameters */
+
+ glEnable(GL_DEPTH_TEST);
+
+ glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
+ glEnable(GL_NORMALIZE);
+
+ /* XXX docs say all polygons are emitted CCW, but tests show that some aren't. */
+ if(getenv("MODEL_IS_BROKEN"))
+ glFrontFace(GL_CW);
+
+ glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
+
+ glutGet(GLUT_ELAPSED_TIME);
+ glutMainLoop();
+
+ /* cleanup - calling 'aiReleaseImport' is important, as the library
+ keeps internal resources until the scene is freed again. Not
+ doing so can cause severe resource leaking. */
+ aiReleaseImport(scene);
+
+ /* We added a log stream to the library, it's our job to disable it
+ again. This will definitely release the last resources allocated
+ by Assimp.*/
+ aiDetachAllLogStreams();
+ return EXIT_SUCCESS;
+}
diff --git a/libs/assimp/samples/SimpleOpenGL/SimpleOpenGL.sln b/libs/assimp/samples/SimpleOpenGL/SimpleOpenGL.sln
new file mode 100644
index 0000000..5ccbafe
--- /dev/null
+++ b/libs/assimp/samples/SimpleOpenGL/SimpleOpenGL.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SimpleOpenGL", "SimpleOpenGL.vcproj", "{A53D047C-2C35-44FB-B7DB-2066FE520950}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A53D047C-2C35-44FB-B7DB-2066FE520950}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A53D047C-2C35-44FB-B7DB-2066FE520950}.Debug|Win32.Build.0 = Debug|Win32
+ {A53D047C-2C35-44FB-B7DB-2066FE520950}.Release|Win32.ActiveCfg = Release|Win32
+ {A53D047C-2C35-44FB-B7DB-2066FE520950}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/libs/assimp/samples/SimpleOpenGL/SimpleOpenGL.vcproj b/libs/assimp/samples/SimpleOpenGL/SimpleOpenGL.vcproj
new file mode 100644
index 0000000..cbc56c1
--- /dev/null
+++ b/libs/assimp/samples/SimpleOpenGL/SimpleOpenGL.vcproj
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="SimpleOpenGL"
+ ProjectGUID="{A53D047C-2C35-44FB-B7DB-2066FE520950}"
+ RootNamespace="SimpleOpenGL"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\glut;..\..\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="glut32.lib assimp.lib"
+ OutputFile="$(OutDir)\$(ProjectName)_Debug.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="..\glut;&quot;..\..\lib\assimp_debug-dll_win32&quot;;..\..\bin\debug\"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy &quot;$(ConfigurationName)\$(TargetFileName)&quot; ..\bin&#x0D;&#x0A;copy ..\..\bin\assimp_debug-dll_Win32\Assimp32d.dll ..\bin&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\glut;..\..\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="glut32.lib assimp.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="..\glut;&quot;..\..\lib\assimp_release-dll_win32&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy &quot;$(ConfigurationName)\$(TargetFileName)&quot; ..\bin&#x0D;&#x0A;copy ..\..\bin\assimp_release-dll_Win32\Assimp32.dll ..\bin&#x0D;&#x0A;"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="res"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ </Filter>
+ <Filter
+ Name="source"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="Sample_SimpleOpenGL.c"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>