Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Luis Penaranda
panoramic
Commits
c8f5aa48
Commit
c8f5aa48
authored
Jan 14, 2013
by
Luis Peñaranda
Browse files
read file names and paths from rc file
parent
fca0faf5
Changes
3
Hide whitespace changes
Inline
Side-by-side
README
View file @
c8f5aa48
...
...
@@ -9,3 +9,11 @@ it was not tested). It requires:
-glut or freeglut.
To build, simply run qmake and make.
To configure, you can set in the file ~/.panorc the following options.
shader_dir=<path to directory containing the shader files>
image_file=<path to the desired input file>
Lines in the file must start with option names, and no spaces should go
between option names, equal signs and values. If no shader path is set, the
default is ./shaders/. If no input file is set, or the file is missing, a
file chooser will be shown at startup.
openglcanvas.cpp
View file @
c8f5aa48
...
...
@@ -4,20 +4,23 @@
#endif
#include
"openglcanvas.h"
#include
<cmath>
#include
<unistd.h>
// for getcwd, getpwuid, getuid
#include
<sys/types.h>
// for fstat, getpwuid, getuid
#include
<sys/stat.h>
// for fstat
#include
<pwd.h>
// for getpwuid (TODO: windows?)
#include
<cstdio>
// for fopen, fclose, getc
#include
<cstring>
#ifdef WINDOWS
#include
<direct.h>
#define GET_WORKDIR _getcwd
#else
#include
<unistd.h>
// unistd was included above
#define GET_WORKDIR getcwd
#endif
#include
<sys/types.h>
// for fstat
#include
<sys/stat.h>
// for fstat
#define PROGNAME "pano_interface"
#define INPUT_IMAGE_FILE "input_images/image_4_input.pnm"
#define VERT_SHADER_FILE "shaders/test_vertex_shader.vert"
#define FRAG_SHADER_FILE "shaders/fragment_shader.frag"
#define VERT_SHADER_FILE "test_vertex_shader.vert"
#define FRAG_SHADER_FILE "fragment_shader.frag"
OpenGLCanvas
::
OpenGLCanvas
(
QWidget
*
parent
)
:
QGLWidget
(
parent
)
...
...
@@ -107,6 +110,51 @@ void OpenGLCanvas::change_visualization(QString name){
}
// This function reads the contents of the ~/.panorc file and stores the
// options in private variables.
// TODO: windows
void
OpenGLCanvas
::
read_config_file
(){
struct
passwd
*
pw
=
getpwuid
(
getuid
());
char
*
filepath
=
pw
->
pw_dir
;
strcat
(
filepath
,
"/.panorc"
);
shader_dir
=
(
char
*
)
malloc
(
512
*
sizeof
(
char
));
shader_dir
[
0
]
=
'\0'
;
input_image_file
=
(
char
*
)
malloc
(
512
*
sizeof
(
char
));
input_image_file
[
0
]
=
'\0'
;
struct
stat
testbuf
;
if
(
stat
(
filepath
,
&
testbuf
)){
fprintf
(
stderr
,
"~/.panorc does not exist
\n
"
);
}
else
{
FILE
*
rcfile
=
fopen
(
filepath
,
"r"
);
char
c
;
char
*
line
=
(
char
*
)
malloc
(
512
*
sizeof
(
char
));
while
((
c
=
getc
(
rcfile
))
!=
EOF
){
while
(
c
==
'\n'
)
// discard empty lines
c
=
getc
(
rcfile
);
if
(
c
==
EOF
)
break
;
line
[
0
]
=
c
;
// first char on the line was already read
if
(
!
fgets
(
line
+
1
,
511
,
rcfile
)){
fprintf
(
stderr
,
"error reading rcfile
\n
"
);
exit
(
-
1
);
}
// check for 'shader_dir' option
if
(
!
strncmp
(
line
,
"shader_dir="
,
11
)){
strcpy
(
shader_dir
,
line
+
11
);
shader_dir
[
strlen
(
line
)
-
12
]
=
'\0'
;
fprintf
(
stderr
,
"shader_dir=%s
\n
"
,
shader_dir
);
}
// check for 'image_file' option
if
(
!
strncmp
(
line
,
"image_file="
,
11
)){
strcpy
(
input_image_file
,
line
+
11
);
input_image_file
[
strlen
(
line
)
-
12
]
=
'\0'
;
fprintf
(
stderr
,
"input_image_file=%s
\n
"
,
input_image_file
);
}
}
fclose
(
rcfile
);
}
}
void
OpenGLCanvas
::
load_image
(
const
char
*
new_image
){
const
char
*
const
progname
=
(
char
*
)(
PROGNAME
);
int
textureSize
=
getTextureSize
(
progname
,
new_image
);
...
...
@@ -135,33 +183,23 @@ void OpenGLCanvas::initializeGL(){
glDepthFunc
(
GL_LEQUAL
);
glHint
(
GL_PERSPECTIVE_CORRECTION_HINT
,
GL_NICEST
);
char
*
input_image
=
(
char
*
)
malloc
(
512
*
sizeof
(
char
*
));
if
(
!
GET_WORKDIR
(
input_image
,
512
)){
fprintf
(
stderr
,
"too long pathname
\n
"
);
exit
(
-
1
);
};
strcat
(
input_image
,
"/
\0
"
);
strcat
(
input_image
,
INPUT_IMAGE_FILE
);
#ifdef __APPLE__
const
char
*
const
progname
=
"PROJ_ROOT_DIR"
;
//const char * input_image = INPUT_IMAGE_FILE;
#else
// progname is a file name or a path???
const
char
*
const
progname
=
(
char
*
)(
PROGNAME
);
//const char * input_image = (char*)(INPUT_IMAGE_FILE);
#endif
fprintf
(
stderr
,
"progname=%s
\n
"
,
progname
);
fprintf
(
stderr
,
"default image=%s
\n
"
,
input_image
);
//
what to do i
f the input file does not exist
read_config_file
(
);
//
I
f the input file does not exist
or was not specified.
struct
stat
testbuf
;
if
(
stat
(
input_image
,
&
testbuf
)){
fprintf
(
stderr
,
"the default image file does not exist!
\n
"
);
if
(
stat
(
input_image_file
,
&
testbuf
)
||!
strcmp
(
input_image_file
,
""
)){
load_image
(
QFileDialog
::
getOpenFileName
(
this
,
tr
(
"Choose Panorama File"
)).
toStdString
().
c_str
());
}
else
{
load_image
(
input_image
);
load_image
(
input_image
_file
);
}
free
(
input_image
);
free
(
input_image
_file
);
// mesh resolution
int
m
,
n
;
...
...
@@ -499,23 +537,25 @@ void OpenGLCanvas::setShaders() {
GLuint
v
=
glCreateShader
(
GL_VERTEX_SHADER
);
GLuint
f
=
glCreateShader
(
GL_FRAGMENT_SHADER
);
// Configure vertex and fragment shader files.
char
*
vs_file
=
(
char
*
)
malloc
(
512
*
sizeof
(
char
*
));
if
(
!
GET_WORKDIR
(
vs_file
,
512
)){
fprintf
(
stderr
,
"too long pathname
\n
"
);
exit
(
-
1
);
};
strcat
(
vs_file
,
"/
\0
"
);
strcat
(
vs_file
,
VERT_SHADER_FILE
);
fprintf
(
stderr
,
"vs_file=%s
\n
"
,
vs_file
);
char
*
fs_file
=
(
char
*
)
malloc
(
512
*
sizeof
(
char
*
));
if
(
!
GET_WORKDIR
(
fs_file
,
512
)){
fprintf
(
stderr
,
"too long pathname
\n
"
);
exit
(
-
1
);
};
strcat
(
fs_file
,
"/
\0
"
);
if
(
!
strcmp
(
shader_dir
,
""
)){
// if shader_dir was not configured
if
(
!
GET_WORKDIR
(
vs_file
,
512
)
||!
GET_WORKDIR
(
fs_file
,
512
)){
fprintf
(
stderr
,
"error reading shader files
\n
"
);
exit
(
-
1
);
}
strcat
(
vs_file
,
"/shaders/"
);
strcat
(
fs_file
,
"/shaders/"
);
}
else
{;
strcpy
(
vs_file
,
shader_dir
);
strcat
(
vs_file
,
"/"
);
strcpy
(
fs_file
,
shader_dir
);
strcat
(
fs_file
,
"/"
);
}
strcat
(
vs_file
,
VERT_SHADER_FILE
);
strcat
(
fs_file
,
FRAG_SHADER_FILE
);
fprintf
(
stderr
,
"fs_file=%s
\n
"
,
fs_file
);
fprintf
(
stderr
,
"
vs_file=%s
\n
fs_file=%s
\n
"
,
vs_file
,
fs_file
);
struct
stat
vs_testbuf
,
fs_testbuf
;
if
(
stat
(
vs_file
,
&
vs_testbuf
)
||
stat
(
fs_file
,
&
fs_testbuf
)){
...
...
@@ -525,15 +565,8 @@ void OpenGLCanvas::setShaders() {
exit
(
-
1
);
}
//#ifdef __APPLE__
// in Mac
//vs = textFileRead(VERT_SHADER_FILE);
//fs = textFileRead(FRAG_SHADER_FILE);
//#else
// in Linux (I think this would also work in mac, I just need to try)
vs
=
textFileRead
(
vs_file
);
fs
=
textFileRead
(
fs_file
);
//#endif
const
char
*
vv
=
vs
;
const
char
*
ff
=
fs
;
...
...
openglcanvas.h
View file @
c8f5aa48
...
...
@@ -41,6 +41,7 @@ public:
explicit
OpenGLCanvas
(
QWidget
*
parent
=
0
);
protected:
void
read_config_file
();
void
load_image
(
const
char
*
new_image
);
void
initializeGL
();
void
resizeGL
(
int
w
,
int
h
);
...
...
@@ -88,6 +89,10 @@ private:
float
*
textureCoordinates
;
//float windowWidth;
//float windowHeight;
// options set in the rc file
char
*
shader_dir
;
char
*
input_image_file
;
};
#endif // OPENGLCANVAS_H
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment