Add filebrowser to select ncfg in IOS

parent 2bae0c34
Thumbs.db Thumbs.db
\ No newline at end of file .DS_Store
/*
# Copyright 2016-2018 The NOMAD Developers Group
#
# 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 <math.h>
#include "aux.h" #include "aux.h"
gvr::Mat4f TranslationMatrix (float x, float y, float z)
{
gvr::Mat4f mvs;
mvs.m[0][0]=1;mvs.m[0][1]=0;mvs.m[0][2]=0; mvs.m[0][3]=x;
mvs.m[1][0]=0;mvs.m[1][1]=1;mvs.m[1][2]=0;mvs.m[1][3]=y;
mvs.m[2][0]=0;mvs.m[2][1]=0;mvs.m[2][2]=1; mvs.m[2][3]=z;
mvs.m[3][0]=0;mvs.m[3][1]=0;mvs.m[3][2]=0; mvs.m[3][3]=1;
return mvs;
}
gvr::Mat4f TranslationMatrix (float v[3])
{
return TranslationMatrix (v[0], v[1], v[2]);
}
gvr::Mat4f ScalingMatrix (float x, float y, float z)
{
gvr::Mat4f mvs;
mvs.m[0][0]=x;mvs.m[0][1]=0;mvs.m[0][2]=0; mvs.m[0][3]=0;
mvs.m[1][0]=0;mvs.m[1][1]=y;mvs.m[1][2]=0;mvs.m[1][3]=0;
mvs.m[2][0]=0;mvs.m[2][1]=0;mvs.m[2][2]=z; mvs.m[2][3]=0;
mvs.m[3][0]=0;mvs.m[3][1]=0;mvs.m[3][2]=0; mvs.m[3][3]=1;
return mvs;
}
gvr::Mat4f ScalingMatrix (float v[3])
{
return ScalingMatrix(v[0], v[1], v[2]);
}
gvr::Mat4f ScalingMatrix (float s)
{
return ScalingMatrix(s,s,s);
}
float getCofactor(float m0, float m1, float m2, float getCofactor(float m0, float m1, float m2,
float m3, float m4, float m5, float m3, float m4, float m5,
float m6, float m7, float m8) float m6, float m7, float m8)
...@@ -13,7 +65,7 @@ float getCofactor(float m0, float m1, float m2, ...@@ -13,7 +65,7 @@ float getCofactor(float m0, float m1, float m2,
//adapted from //adapted from
//openvr-0.9.19\samples\shared\matrices.cpp //openvr-0.9.19\samples\shared\matrices.cpp
static gvr::Mat4f invert (const gvr::Mat4f& m) gvr::Mat4f invert (const gvr::Mat4f& m)
{ {
gvr::Mat4f r; gvr::Mat4f r;
// get cofactors of minor matrices // get cofactors of minor matrices
......
/*
# Copyright 2016-2018 The NOMAD Developers Group
#
# 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 "vr/gvr/capi/include/gvr.h"
const float EPSILON = 0.00001f;
gvr::Mat4f TranslationMatrix (float x, float y, float z);
gvr::Mat4f TranslationMatrix (float v[3]);
gvr::Mat4f ScalingMatrix (float x, float y, float z);
gvr::Mat4f ScalingMatrix (float v[3]);
gvr::Mat4f ScalingMatrix (float s);
float getCofactor(float m0, float m1, float m2, float getCofactor(float m0, float m1, float m2,
float m3, float m4, float m5, float m3, float m4, float m5,
float m6, float m7, float m8); float m6, float m7, float m8);
static gvr::Mat4f invert (const gvr::Mat4f& m); gvr::Mat4f invert (const gvr::Mat4f& m);
/*# Copyright 2016-2018 The NOMAD Developers Group*/
/* /*
* Copyright 2016 Google Inc. All Rights Reserved. * Copyright 2016 Google Inc. All Rights Reserved.
* *
...@@ -19,18 +20,28 @@ ...@@ -19,18 +20,28 @@
#import "GVROverlayView.h" #import "GVROverlayView.h"
#import "treasure_hunt_renderer.h" #import "treasure_hunt_renderer.h"
#include "FileBrowser/FileBrowser.h"
#include "FileBrowser-Swift.h"
@interface TreasureHuntViewController ()<GLKViewControllerDelegate, GVROverlayViewDelegate> { @interface TreasureHuntViewController ()<GLKViewControllerDelegate, GVROverlayViewDelegate> {
gvr_context *_gvrContext; gvr_context *_gvrContext;
std::unique_ptr<TreasureHuntRenderer> _renderer; std::unique_ptr<TreasureHuntRenderer> _renderer;
} }
@end @end
NSString * filename;
@implementation TreasureHuntViewController @implementation TreasureHuntViewController
- (void)dealloc { - (void)dealloc {
gvr_destroy(&_gvrContext); gvr_destroy(&_gvrContext);
} }
- (UIViewController *)presentingViewControllerForSettingsDialog {
return self;
}
- (void)viewDidLoad { - (void)viewDidLoad {
[super viewDidLoad]; [super viewDidLoad];
...@@ -47,6 +58,7 @@ ...@@ -47,6 +58,7 @@
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapGLView:)]; [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapGLView:)];
[self.view addGestureRecognizer:tapGesture]; [self.view addGestureRecognizer:tapGesture];
// Create an OpenGL ES context and assign it to the view loaded from storyboard // Create an OpenGL ES context and assign it to the view loaded from storyboard
GLKView *glkView = (GLKView *)self.view; GLKView *glkView = (GLKView *)self.view;
glkView.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3]; glkView.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
...@@ -62,11 +74,26 @@ ...@@ -62,11 +74,26 @@
// Create GVR context. // Create GVR context.
_gvrContext = gvr_create(); _gvrContext = gvr_create();
// Initialize TreasureHuntRenderer. FileBrowser *fb=[[FileBrowser alloc] initWithInitialPath: nullptr allowEditing:NO showCancelButton:NO];
_renderer.reset(new TreasureHuntRenderer(_gvrContext));
_renderer->InitializeGl(); void (^ _Nullable didSelectFileCallback)(FBFile * _Nonnull) = ^(FBFile * _Nonnull file)
} {
filename=[[file filePath] path];
NSFileManager *filemgr = [NSFileManager defaultManager];
//http://www.techotopia.com/index.php/Working_with_Directories_on_iPhone_OS#The_Application_Documents_Directory
if ([filemgr changeCurrentDirectoryPath: [filename stringByDeletingLastPathComponent]] == NO)
NSLog(@"Cannot change current directory");
_renderer->setConfigFile (filename);
_renderer->InitializeGl();
};
fb.didSelectFile=didSelectFileCallback;
//[self.navigationController pushViewController:fb animated:YES];
[self presentViewController:fb animated:YES completion:nil];
_renderer.reset(new TreasureHuntRenderer(_gvrContext));
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations { - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
// GVR only supports landscape right orientation for inserting the phone in the viewer. // GVR only supports landscape right orientation for inserting the phone in the viewer.
...@@ -104,9 +131,6 @@ ...@@ -104,9 +131,6 @@
NSLog(@"User pressed back button"); NSLog(@"User pressed back button");
} }
- (UIViewController *)presentingViewControllerForSettingsDialog {
return self;
}
- (void)didPresentSettingsDialog:(BOOL)presented { - (void)didPresentSettingsDialog:(BOOL)presented {
// The overlay view is presenting the settings dialog. Pause our rendering while presented. // The overlay view is presenting the settings dialog. Pause our rendering while presented.
......
...@@ -45,6 +45,10 @@ class TreasureHuntRenderer { ...@@ -45,6 +45,10 @@ class TreasureHuntRenderer {
*/ */
~TreasureHuntRenderer(); ~TreasureHuntRenderer();
void setConfigFile (NSString * filename);
/** /**
* Initialize any GL-related objects. This should be called on the rendering * Initialize any GL-related objects. This should be called on the rendering
* thread with a valid GL context. * thread with a valid GL context.
...@@ -106,7 +110,7 @@ class TreasureHuntRenderer { ...@@ -106,7 +110,7 @@ class TreasureHuntRenderer {
gvr::BufferViewport scratch_viewport_; gvr::BufferViewport scratch_viewport_;
gvr::Mat4f head_view_; gvr::Mat4f head_view_;
gvr::Mat4f model_cube_; //gvr::Mat4f model_cube_;
gvr::Mat4f camera_; gvr::Mat4f camera_;
gvr::Mat4f view_; gvr::Mat4f view_;
gvr::Mat4f modelview_projection_cube_; gvr::Mat4f modelview_projection_cube_;
...@@ -148,8 +152,10 @@ class TreasureHuntRenderer { ...@@ -148,8 +152,10 @@ class TreasureHuntRenderer {
void RenderAtomTrajectories(const gvr::Mat4f eyeViewProjection); void RenderAtomTrajectories(const gvr::Mat4f eyeViewProjection);
void RenderIsos(const gvr::Mat4f eyeViewProjection, int curDataPos); void RenderIsos(const gvr::Mat4f eyeViewProjection, int curDataPos);
float UserTranslation[3]={10,0,0}; float UserTranslation[3]={10,0,0};
NSString * configfilename=nullptr;
int error=0; int error=0;
bool openGLIsInitialized=false;
}; };
#endif // TREASUREHUNT_APP_SRC_MAIN_JNI_TREASUREHUNTRENDERER_H_ // NOLINT #endif // TREASUREHUNT_APP_SRC_MAIN_JNI_TREASUREHUNTRENDERER_H_ // NOLINT
...@@ -164,22 +164,20 @@ static void CheckGLError(const char* label) { ...@@ -164,22 +164,20 @@ static void CheckGLError(const char* label) {
} // namespace } // namespace
void TreasureHuntRenderer::setConfigFile (NSString * filename)
{
configfilename=filename;
loadConfigFile();
}
void TreasureHuntRenderer::loadConfigFile(void) void TreasureHuntRenderer::loadConfigFile(void)
{ {
//http://www.techotopia.com/index.php/Working_with_Directories_on_iPhone_OS#The_Application_Documents_Directory if (configfilename==nullptr)
NSArray *dirPaths; return;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr changeCurrentDirectoryPath: docsDir] == NO)
NSLog(@"Cannot change current directory");
if ((error=::loadConfigFile("cytosine.ncfg"))<0) { if ((error=::loadConfigFile(configfilename.UTF8String))<0) {
if (-100<error) { if (-100<error) {
eprintf(loadConfigFileErrors[-error]); eprintf(loadConfigFileErrors[-error]);
eprintf("Config file reading error"); eprintf("Config file reading error");
...@@ -211,13 +209,14 @@ TreasureHuntRenderer::TreasureHuntRenderer( ...@@ -211,13 +209,14 @@ TreasureHuntRenderer::TreasureHuntRenderer(
: gvr_api_(gvr::GvrApi::WrapNonOwned(gvr_context)), : gvr_api_(gvr::GvrApi::WrapNonOwned(gvr_context)),
scratch_viewport_(gvr_api_->CreateBufferViewport()) scratch_viewport_(gvr_api_->CreateBufferViewport())
{ {
loadConfigFile(); //won't have config file until later
// loadConfigFile();
} }
TreasureHuntRenderer::~TreasureHuntRenderer() {} TreasureHuntRenderer::~TreasureHuntRenderer() {}
void TreasureHuntRenderer::InitializeGl() { void TreasureHuntRenderer::InitializeGl() {
gvr_api_->InitializeGl(); gvr_api_->InitializeGl();
glGenTextures(2, textures); glGenTextures(2, textures);
glGenTextures(2+ZLAYERS, textDepthPeeling); glGenTextures(2+ZLAYERS, textDepthPeeling);
...@@ -288,9 +287,13 @@ void TreasureHuntRenderer::InitializeGl() { ...@@ -288,9 +287,13 @@ void TreasureHuntRenderer::InitializeGl() {
viewport_list_.reset(new gvr::BufferViewportList(gvr_api_->CreateEmptyBufferViewportList())); viewport_list_.reset(new gvr::BufferViewportList(gvr_api_->CreateEmptyBufferViewportList()));
openGLIsInitialized=true;
} }
void TreasureHuntRenderer::DrawFrame() { void TreasureHuntRenderer::DrawFrame() {
if (!openGLIsInitialized)
return;
viewport_list_->SetToRecommendedBufferViewports(); viewport_list_->SetToRecommendedBufferViewports();
if (animateTimesteps) { if (animateTimesteps) {
...@@ -520,6 +523,8 @@ void TreasureHuntRenderer::RenderAtoms(const float *m) //m[16] ...@@ -520,6 +523,8 @@ void TreasureHuntRenderer::RenderAtoms(const float *m) //m[16]
LOGW("FIXME, No Tess code for atoms yet!"); LOGW("FIXME, No Tess code for atoms yet!");
return; return;
} else { //no tess } else { //no tess
if (AtomVAO==nullptr) //not yet loaded
return;
glBindVertexArray(AtomVAO[0]); glBindVertexArray(AtomVAO[0]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, AtomIndices[0]); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, AtomIndices[0]);
if ((e = glGetError()) != GL_NO_ERROR) if ((e = glGetError()) != GL_NO_ERROR)
......
...@@ -56,17 +56,23 @@ GLenum atomTexture(GLuint t) ...@@ -56,17 +56,23 @@ GLenum atomTexture(GLuint t)
a[(i+atomsInPeriodicTable)*4+3]=extraAtomData[i][3]*atomScaling; a[(i+atomsInPeriodicTable)*4+3]=extraAtomData[i][3]*atomScaling;
} }
glBindTexture(GL_TEXTURE_2D, t); //atom texture glBindTexture(GL_TEXTURE_2D, t); //atom texture
if ((e = glGetError()) != GL_NO_ERROR) {
eprintf( "opengl error %d, atomTexture bind\n", e);
}
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
#ifdef __APPLE__ if ((e = glGetError()) != GL_NO_ERROR) {
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, finalatoms, 1, 0, GL_RGBA, GL_FLOAT, a); eprintf( "opengl error %d, atomTexture parameter\n", e);
#else }
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, finalatoms, 1, 0, GL_RGBA, GL_FLOAT, a);
#endif
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, finalatoms, 1, 0, GL_RGBA, GL_FLOAT, a);
if ((e = glGetError()) != GL_NO_ERROR) {
eprintf( "opengl error %d, atomTexture glTexImage2D\n", e);
}
glBindTexture( GL_TEXTURE_2D, 0 ); glBindTexture( GL_TEXTURE_2D, 0 );
if ((e = glGetError()) != GL_NO_ERROR) { if ((e = glGetError()) != GL_NO_ERROR) {
eprintf( "opengl error %d, atomTexture\n", e); eprintf( "opengl error %d, atomTexture\n", e);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment