diff --git a/CMakeLists.txt b/CMakeLists.txt index 6294278..a8526ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,7 +59,21 @@ ENDIF (APPLE) add_subdirectory(kraken) -add_library(kraken STATIC ${SRCS} ${KRAKEN_PUBLIC_HEADERS}) +add_public_header(hydra/include/aabb.h) +add_public_header(hydra/include/hitinfo.h) +add_public_header(hydra/include/hydra.h) +add_public_header(hydra/include/matrix2.h) +add_public_header(hydra/include/matrix2x3.h) +add_public_header(hydra/include/matrix4.h) +add_public_header(hydra/include/quaternion.h) +add_public_header(hydra/include/scalar.h) +add_public_header(hydra/include/triangle3.h) +add_public_header(hydra/include/vector2.h) +add_public_header(hydra/include/vector3.h) +add_public_header(hydra/include/vector4.h) +add_public_header(hydra/include/vector2i.h) + +add_library(kraken SHARED ${SRCS} ${KRAKEN_PUBLIC_HEADERS}) set(Boost_USE_STATIC_LIBS ON) # only find static libs set(Boost_USE_MULTITHREADED ON) @@ -75,13 +89,14 @@ add_subdirectory(hydra) include_directories(hydra/include) target_link_libraries(kraken hydra) + # ---- OpenGL ---- find_package(OpenGL REQUIRED) include_directories( ${OPENGL_INCLUDE_DIRS} ) target_link_libraries(kraken ${OPENGL_LIBRARIES}) # ---- GLAD ---- -set(GLAD_EXTENSIONS "GL_EXT_texture_filter_anisotropic, GL_EXT_texture_compression_s3tc, GL_S3_s3tc") +set(GLAD_EXTENSIONS "GL_EXT_texture_filter_anisotropic,GL_EXT_texture_compression_s3tc, GL_S3_s3tc" CACHE STRING "Gl exts" FORCE) add_subdirectory(3rdparty/glad) include_directories(${GLAD_INCLUDE_DIRS}) target_link_libraries(kraken glad) @@ -105,10 +120,21 @@ PROPERTIES PUBLIC_HEADER "${KRAKEN_PUBLIC_HEADERS}" PRIVATE_HEADER "${PRIVATE_HEADER_FILES}" ARCHIVE_OUTPUT_DIRECTORY "archive" - LIBRARY_OUTPUT_DIRECTORY "lib" + LIBRARY_OUTPUT_DIRECTORY "lib${LIB_SUFFIX}" OUTPUT_NAME kraken ) +# install(TARGETS kraken DESTINATION ${PROJECT_BINARY_DIR}/lib${LIB_SUFFIX}) +# install(FILES ${KRAKEN_PUBLIC_HEADERS} DESTINATION ${PROJECT_BINARY_DIR}/include) + +# INSTALL(TARGETS kraken +# LIBRARY DESTINATION "lib${LIB_SUFFIX}" +# ARCHIVE DESTINATION "lib${LIB_SUFFIX}" +# PUBLIC_HEADER DESTINATION "include" +# ) + + + # add_custom_target(package # COMMENT "Compressing..." # WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/archive" diff --git a/hydra b/hydra index 759b7af..5cca3a9 160000 --- a/hydra +++ b/hydra @@ -1 +1 @@ -Subproject commit 759b7af066fa82890591ae24aea8c7d64fdf5379 +Subproject commit 5cca3a9fb1e4d683741670795134e715ce67d49e diff --git a/kraken/CMakeLists.txt b/kraken/CMakeLists.txt index 6115599..ec7716e 100644 --- a/kraken/CMakeLists.txt +++ b/kraken/CMakeLists.txt @@ -21,9 +21,10 @@ add_sources(KRBundleManager.cpp) add_sources(KRCamera.cpp) add_sources(KRCollider.cpp) add_sources(KRContext.cpp) +add_sources(KRStreamer.cpp) IF(APPLE) add_sources(KREngine.mm) - add_sources(KRStreamer.mm) + IF(IOS) add_sources(KRContext_ios.mm) ELSE() @@ -55,7 +56,7 @@ add_sources(KRNode.cpp) add_sources(KROctree.cpp) add_sources(KROctreeNode.cpp) add_sources(KRParticleSystem.cpp) -add_sources(KRParticleSystemNewtonian.h) +add_sources(KRParticleSystemNewtonian.cpp) add_sources(KRPointLight.cpp) add_sources(KRRenderSettings.cpp) add_sources(KRResource+blend.cpp) @@ -64,6 +65,7 @@ add_sources(KRResource+obj.cpp) add_sources(KRResource.cpp) add_sources(KRReverbZone.cpp) add_sources(KRScene.cpp) +add_sources(KRSceneManager.cpp) add_sources(KRShader.cpp) add_sources(KRShaderManager.cpp) add_sources(KRSpotLight.cpp) @@ -79,3 +81,5 @@ add_sources(KRTextureTGA.cpp) add_sources(KRUnknown.cpp) add_sources(KRUnknownManager.cpp) add_sources(KRViewport.cpp) +add_sources(../3rdparty/tinyxml2/tinyxml2.cpp) +add_sources(../3rdparty/forsyth/forsyth.cpp) diff --git a/kraken/KRParticleSystemNewtonian.cpp b/kraken/KRParticleSystemNewtonian.cpp index 285761f..30ae6bc 100755 --- a/kraken/KRParticleSystemNewtonian.cpp +++ b/kraken/KRParticleSystemNewtonian.cpp @@ -1,89 +1,89 @@ -// -// KRParticleSystemNewtonian.cpp -// KREngine -// -// Created by Kearwood Gilbert on 2012-11-02. -// Copyright (c) 2012 Kearwood Software. All rights reserved. -// - - -#include "KREngine-common.h" -#include "KRParticleSystemNewtonian.h" -#include "KRTexture.h" -#include "KRContext.h" - -KRParticleSystemNewtonian::KRParticleSystemNewtonian(KRScene &scene, std::string name) : KRParticleSystem(scene, name) -{ - m_particlesAbsoluteTime = 0.0f; -} - -KRParticleSystemNewtonian::~KRParticleSystemNewtonian() -{ - -} - -std::string KRParticleSystemNewtonian::getElementName() -{ - return "newtonian_particles"; -} - -void KRParticleSystemNewtonian::loadXML(tinyxml2::XMLElement *e) -{ - KRParticleSystem::loadXML(e); -} - -tinyxml2::XMLElement *KRParticleSystemNewtonian::saveXML( tinyxml2::XMLNode *parent) -{ - tinyxml2::XMLElement *e = KRParticleSystem::saveXML(parent); - return e; -} - - -AABB KRParticleSystemNewtonian::getBounds() -{ - return AABB(-Vector3::One(), Vector3::One(), getModelMatrix()); -} - -void KRParticleSystemNewtonian::physicsUpdate(float deltaTime) -{ - KRParticleSystem::physicsUpdate(deltaTime); - m_particlesAbsoluteTime += deltaTime; -} - -bool KRParticleSystemNewtonian::hasPhysics() -{ - return true; -} - -void KRParticleSystemNewtonian::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { - - if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); - - if(renderPass == KRNode::RENDER_PASS_ADDITIVE_PARTICLES) { - if(viewport.visible(getBounds())) { - - - // Enable z-buffer test - GLDEBUG(glEnable(GL_DEPTH_TEST)); - GLDEBUG(glDepthRangef(0.0, 1.0)); - - KRTexture *pParticleTexture = m_pContext->getTextureManager()->getTexture("flare"); - m_pContext->getTextureManager()->selectTexture(0, pParticleTexture, 0.0f, KRTexture::TEXTURE_USAGE_PARTICLE); - - int particle_count = 10000; - - KRShader *pParticleShader = m_pContext->getShaderManager()->getShader("dust_particle", pCamera, point_lights, directional_lights, spot_lights, 0, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, renderPass); - - Vector3 rim_color; Vector4 fade_color; - if(getContext().getShaderManager()->selectShader(*pCamera, pParticleShader, viewport, getModelMatrix(), point_lights, directional_lights, spot_lights, 0, renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) { - pParticleShader->setUniform(KRShader::KRENGINE_UNIFORM_FLARE_SIZE, 1.0f); - - KRDataBlock index_data; - m_pContext->getMeshManager()->bindVBO(m_pContext->getMeshManager()->getRandomParticles(), index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA), false, 1.0f); - GLDEBUG(glDrawArrays(GL_TRIANGLES, 0, particle_count*3)); - } - } - } -} +// +// KRParticleSystemNewtonian.cpp +// KREngine +// +// Created by Kearwood Gilbert on 2012-11-02. +// Copyright (c) 2012 Kearwood Software. All rights reserved. +// + + +#include "KREngine-common.h" +#include "KRParticleSystemNewtonian.h" +#include "KRTexture.h" +#include "KRContext.h" + +KRParticleSystemNewtonian::KRParticleSystemNewtonian(KRScene &scene, std::string name) : KRParticleSystem(scene, name) +{ + m_particlesAbsoluteTime = 0.0f; +} + +KRParticleSystemNewtonian::~KRParticleSystemNewtonian() +{ + +} + +std::string KRParticleSystemNewtonian::getElementName() +{ + return "newtonian_particles"; +} + +void KRParticleSystemNewtonian::loadXML(tinyxml2::XMLElement *e) +{ + KRParticleSystem::loadXML(e); +} + +tinyxml2::XMLElement *KRParticleSystemNewtonian::saveXML( tinyxml2::XMLNode *parent) +{ + tinyxml2::XMLElement *e = KRParticleSystem::saveXML(parent); + return e; +} + + +AABB KRParticleSystemNewtonian::getBounds() +{ + return AABB::Create(-Vector3::One(), Vector3::One(), getModelMatrix()); +} + +void KRParticleSystemNewtonian::physicsUpdate(float deltaTime) +{ + KRParticleSystem::physicsUpdate(deltaTime); + m_particlesAbsoluteTime += deltaTime; +} + +bool KRParticleSystemNewtonian::hasPhysics() +{ + return true; +} + +void KRParticleSystemNewtonian::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { + + if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; + + KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + + if(renderPass == KRNode::RENDER_PASS_ADDITIVE_PARTICLES) { + if(viewport.visible(getBounds())) { + + + // Enable z-buffer test + GLDEBUG(glEnable(GL_DEPTH_TEST)); + GLDEBUG(glDepthRangef(0.0, 1.0)); + + KRTexture *pParticleTexture = m_pContext->getTextureManager()->getTexture("flare"); + m_pContext->getTextureManager()->selectTexture(0, pParticleTexture, 0.0f, KRTexture::TEXTURE_USAGE_PARTICLE); + + int particle_count = 10000; + + KRShader *pParticleShader = m_pContext->getShaderManager()->getShader("dust_particle", pCamera, point_lights, directional_lights, spot_lights, 0, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, renderPass); + + Vector3 rim_color; Vector4 fade_color; + if(getContext().getShaderManager()->selectShader(*pCamera, pParticleShader, viewport, getModelMatrix(), point_lights, directional_lights, spot_lights, 0, renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) { + pParticleShader->setUniform(KRShader::KRENGINE_UNIFORM_FLARE_SIZE, 1.0f); + + KRDataBlock index_data; + m_pContext->getMeshManager()->bindVBO(m_pContext->getMeshManager()->getRandomParticles(), index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA), false, 1.0f); + GLDEBUG(glDrawArrays(GL_TRIANGLES, 0, particle_count*3)); + } + } + } +} diff --git a/kraken/KRStreamer.mm b/kraken/KRStreamer.cpp old mode 100755 new mode 100644 similarity index 82% rename from kraken/KRStreamer.mm rename to kraken/KRStreamer.cpp index dc287a6..4543021 --- a/kraken/KRStreamer.mm +++ b/kraken/KRStreamer.cpp @@ -1,55 +1,60 @@ -// -// KRStreamer.cpp -// Kraken -// -// Created by Kearwood Gilbert on 11/1/2013. -// Copyright (c) 2013 Kearwood Software. All rights reserved. -// - -#include "KREngine-common.h" - -#include "KRStreamer.h" -#include "KRContext.h" - -#include - - -KRStreamer::KRStreamer(KRContext &context) : m_context(context) -{ - m_running = false; - m_stop = false; -} - -void KRStreamer::startStreamer() -{ - if(!m_running) { - m_running = true; - KRContext::activateStreamerContext(); - - m_thread = std::thread(&KRStreamer::run, this); - } -} - -KRStreamer::~KRStreamer() -{ - if(m_running) { - m_stop = true; - m_thread.join(); - m_running = false; - } -} - -void KRStreamer::run() -{ - pthread_setname_np("Kraken - Streamer"); - - std::chrono::microseconds sleep_duration( 15000 ); - - KRContext::activateStreamerContext(); - - while(!m_stop) - { - m_context.doStreaming(); - std::this_thread::sleep_for( sleep_duration ); - } -} +// +// KRStreamer.cpp +// Kraken +// +// Created by Kearwood Gilbert on 11/1/2013. +// Copyright (c) 2013 Kearwood Software. All rights reserved. +// + +#include "KREngine-common.h" + +#include "KRStreamer.h" +#include "KRContext.h" + +#include + + +KRStreamer::KRStreamer(KRContext &context) : m_context(context) +{ + m_running = false; + m_stop = false; +} + +void KRStreamer::startStreamer() +{ + if(!m_running) { + m_running = true; + KRContext::activateStreamerContext(); + + m_thread = std::thread(&KRStreamer::run, this); + } +} + +KRStreamer::~KRStreamer() +{ + if(m_running) { + m_stop = true; + m_thread.join(); + m_running = false; + } +} + +void KRStreamer::run() +{ + +#if defined(_WIN32) || defined(_WIN64) + // TODO - Set thread names on windows +#else + pthread_setname_np("Kraken - Streamer"); +#endif + + std::chrono::microseconds sleep_duration( 15000 ); + + KRContext::activateStreamerContext(); + + while(!m_stop) + { + m_context.doStreaming(); + std::this_thread::sleep_for( sleep_duration ); + } +}