Currently attempting to export an OpenGL-enabled display
This commit is contained in:
parent
ccec4c4e67
commit
5bcbdec97c
7
Makefile
7
Makefile
|
@ -1,6 +1,6 @@
|
|||
PACKAGE = GServer
|
||||
VERSION = 0.0.0
|
||||
SUBDIRS = src
|
||||
SUBDIRS = data src
|
||||
RM = rm -f
|
||||
LN = ln -f
|
||||
TAR = tar -czvf
|
||||
|
@ -21,11 +21,15 @@ dist:
|
|||
$(RM) -r -- $(PACKAGE)-$(VERSION)
|
||||
$(LN) -s -- . $(PACKAGE)-$(VERSION)
|
||||
@$(TAR) $(PACKAGE)-$(VERSION).tar.gz -- \
|
||||
$(PACKAGE)-$(VERSION)/data/Makefile \
|
||||
$(PACKAGE)-$(VERSION)/data/GServer.interface \
|
||||
$(PACKAGE)-$(VERSION)/data/project.conf \
|
||||
$(PACKAGE)-$(VERSION)/src/gserver.c \
|
||||
$(PACKAGE)-$(VERSION)/src/main.c \
|
||||
$(PACKAGE)-$(VERSION)/src/Makefile \
|
||||
$(PACKAGE)-$(VERSION)/src/gserver.h \
|
||||
$(PACKAGE)-$(VERSION)/src/project.conf \
|
||||
$(PACKAGE)-$(VERSION)/src/video/glx.c \
|
||||
$(PACKAGE)-$(VERSION)/src/video/vbe.c \
|
||||
$(PACKAGE)-$(VERSION)/src/video/vesa.c \
|
||||
$(PACKAGE)-$(VERSION)/src/video/Makefile \
|
||||
|
@ -35,6 +39,7 @@ dist:
|
|||
$(PACKAGE)-$(VERSION)/COPYING \
|
||||
$(PACKAGE)-$(VERSION)/Makefile \
|
||||
$(PACKAGE)-$(VERSION)/TODO \
|
||||
$(PACKAGE)-$(VERSION)/config.h \
|
||||
$(PACKAGE)-$(VERSION)/project.conf
|
||||
$(RM) -- $(PACKAGE)-$(VERSION)
|
||||
|
||||
|
|
10
config.h
Normal file
10
config.h
Normal file
|
@ -0,0 +1,10 @@
|
|||
#define PACKAGE "GServer"
|
||||
#define VERSION "0.0.0"
|
||||
|
||||
#ifndef PREFIX
|
||||
# define PREFIX "/usr/local"
|
||||
#endif
|
||||
|
||||
#ifndef LIBDIR
|
||||
# define LIBDIR PREFIX "/lib"
|
||||
#endif
|
54
data/GServer.interface
Normal file
54
data/GServer.interface
Normal file
|
@ -0,0 +1,54 @@
|
|||
service=GServer
|
||||
port=4248
|
||||
|
||||
[glBegin]
|
||||
arg1=UINT32
|
||||
|
||||
[glClear]
|
||||
arg1=UINT32
|
||||
|
||||
[glClearColor]
|
||||
arg1=FLOAT
|
||||
arg2=FLOAT
|
||||
arg3=FLOAT
|
||||
arg4=FLOAT
|
||||
|
||||
[glClearDepth]
|
||||
arg1=DOUBLE
|
||||
|
||||
[glColor3f]
|
||||
arg1=FLOAT
|
||||
arg2=FLOAT
|
||||
arg3=FLOAT
|
||||
|
||||
[glColor3i]
|
||||
arg1=INT32
|
||||
arg2=INT32
|
||||
arg3=INT32
|
||||
|
||||
[glEnd]
|
||||
ret=void
|
||||
|
||||
[glFlush]
|
||||
ret=void
|
||||
|
||||
[glLoadIdentity]
|
||||
ret=void
|
||||
|
||||
[glTranslatef]
|
||||
arg1=FLOAT
|
||||
arg2=FLOAT
|
||||
arg3=FLOAT
|
||||
|
||||
[glVertex3f]
|
||||
arg1=FLOAT
|
||||
arg2=FLOAT
|
||||
arg3=FLOAT
|
||||
|
||||
[glVertex3i]
|
||||
arg1=INT32
|
||||
arg2=INT32
|
||||
arg3=INT32
|
||||
|
||||
[SwapBuffers]
|
||||
ret=void
|
21
data/Makefile
Normal file
21
data/Makefile
Normal file
|
@ -0,0 +1,21 @@
|
|||
PREFIX = /usr/local
|
||||
DESTDIR =
|
||||
MKDIR = mkdir -p
|
||||
INSTALL = install
|
||||
RM = rm -f
|
||||
|
||||
|
||||
all:
|
||||
|
||||
clean:
|
||||
|
||||
distclean: clean
|
||||
|
||||
install: all
|
||||
$(MKDIR) $(DESTDIR)$(PREFIX)/etc/AppInterface
|
||||
$(INSTALL) -m 0644 -- GServer.interface $(DESTDIR)$(PREFIX)/etc/AppInterface/GServer.interface
|
||||
|
||||
uninstall:
|
||||
$(RM) -- $(DESTDIR)$(PREFIX)/etc/AppInterface/GServer.interface
|
||||
|
||||
.PHONY: all clean distclean install uninstall
|
4
data/project.conf
Normal file
4
data/project.conf
Normal file
|
@ -0,0 +1,4 @@
|
|||
dist=Makefile,GServer.interface
|
||||
|
||||
[GServer.interface]
|
||||
install=$(PREFIX)/etc/AppInterface
|
|
@ -1,5 +1,6 @@
|
|||
package=GServer
|
||||
version=0.0.0
|
||||
config=h
|
||||
|
||||
subdirs=src
|
||||
dist=COPYING,Makefile,TODO
|
||||
subdirs=data,src
|
||||
dist=COPYING,Makefile,TODO,config.h
|
||||
|
|
19
src/Makefile
19
src/Makefile
|
@ -1,14 +1,14 @@
|
|||
SUBDIRS = video
|
||||
TARGETS = GServer
|
||||
TARGETS = ../data/GServer.h GServer
|
||||
PREFIX = /usr/local
|
||||
DESTDIR =
|
||||
BINDIR = $(PREFIX)/bin
|
||||
CC = cc
|
||||
CPPFLAGSF= -I $(PREFIX)/include
|
||||
CPPFLAGS=
|
||||
CFLAGSF = -W `pkg-config --cflags glu`
|
||||
CPPFLAGSF=
|
||||
CPPFLAGS= -I $(PREFIX)/include
|
||||
CFLAGSF = -W `pkg-config --cflags gl`
|
||||
CFLAGS = -Wall -g -O2 -pedantic
|
||||
LDFLAGSF= -lSystem `pkg-config --libs glu`
|
||||
LDFLAGSF= -lSystem `pkg-config --libs glu` -Wl,-export-dynamic
|
||||
LDFLAGS = -L$(PREFIX)/lib -Wl,-rpath,$(PREFIX)/lib
|
||||
RM = rm -f
|
||||
LN = ln -f
|
||||
|
@ -21,6 +21,9 @@ all: subdirs $(TARGETS)
|
|||
subdirs:
|
||||
@for i in $(SUBDIRS); do (cd $$i && $(MAKE)) || exit; done
|
||||
|
||||
../data/GServer.h: ../data/GServer.interface
|
||||
./appbroker.sh "../data/GServer.h"
|
||||
|
||||
GServer_OBJS = gserver.o main.o
|
||||
GServer_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||
GServer_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||
|
@ -28,7 +31,7 @@ GServer_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
|||
GServer: $(GServer_OBJS)
|
||||
$(CC) -o GServer $(GServer_OBJS) $(GServer_LDFLAGS)
|
||||
|
||||
gserver.o: gserver.c gserver.h
|
||||
gserver.o: gserver.c gserver.h ../data/GServer.h ../config.h
|
||||
$(CC) $(GServer_CFLAGS) -c gserver.c
|
||||
|
||||
main.o: main.c gserver.h
|
||||
|
@ -36,11 +39,11 @@ main.o: main.c gserver.h
|
|||
|
||||
clean:
|
||||
@for i in $(SUBDIRS); do (cd $$i && $(MAKE) clean) || exit; done
|
||||
$(RM) -- $(GServer_OBJS)
|
||||
$(RM) -- $(../data/GServer.h_OBJS) $(GServer_OBJS)
|
||||
|
||||
distclean:
|
||||
@for i in $(SUBDIRS); do (cd $$i && $(MAKE) distclean) || exit; done
|
||||
$(RM) -- $(GServer_OBJS)
|
||||
$(RM) -- $(../data/GServer.h_OBJS) $(GServer_OBJS)
|
||||
$(RM) -- $(TARGETS)
|
||||
|
||||
install: all
|
||||
|
|
20
src/appbroker.sh
Executable file
20
src/appbroker.sh
Executable file
|
@ -0,0 +1,20 @@
|
|||
#!/bin/sh
|
||||
#$Id$
|
||||
|
||||
|
||||
|
||||
#usage
|
||||
usage()
|
||||
{
|
||||
echo "Usage: ./appbroker.sh target" 1>&2
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
#main
|
||||
if [ $# -ne 1 ]; then
|
||||
usage
|
||||
exit $?
|
||||
fi
|
||||
APPINTERFACE="${1%%.h}.interface"
|
||||
AppBroker -o "$1" "$APPINTERFACE"
|
172
src/gserver.c
172
src/gserver.c
|
@ -1,14 +1,34 @@
|
|||
/* $Id$ */
|
||||
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Graphics GServer */
|
||||
/* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <dlfcn.h>
|
||||
#include <GL/glx.h>
|
||||
#include "video/video.h"
|
||||
#include "../data/GServer.h"
|
||||
#include "gserver.h"
|
||||
#include "../config.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
# define DEBUG_INTERFACE() fprintf(stderr, "DEBUG: %s()\n", __func__)
|
||||
#else
|
||||
# define DEBUG_INTERFACE()
|
||||
#endif
|
||||
|
||||
|
||||
/* GServer */
|
||||
|
@ -20,9 +40,17 @@ struct _GServer
|
|||
int event_own;
|
||||
AppServer * appserver;
|
||||
int loop;
|
||||
|
||||
/* video */
|
||||
void * video_handle;
|
||||
VideoPlugin * video_plugin;
|
||||
};
|
||||
|
||||
|
||||
/* variables */
|
||||
static GServer * _gserver = NULL;
|
||||
|
||||
|
||||
/* public */
|
||||
/* functions */
|
||||
/* gserver_new */
|
||||
|
@ -36,6 +64,7 @@ GServer * gserver_new(AppServerOptions options, Event * event)
|
|||
|
||||
if((gserver = object_new(sizeof(*gserver))) == NULL)
|
||||
return NULL;
|
||||
_gserver = gserver;
|
||||
if(_new_init(options, gserver, event) != 0)
|
||||
{
|
||||
object_delete(gserver);
|
||||
|
@ -46,6 +75,8 @@ GServer * gserver_new(AppServerOptions options, Event * event)
|
|||
|
||||
static int _new_init(AppServerOptions options, GServer * gserver, Event * event)
|
||||
{
|
||||
gserver->video_handle = NULL;
|
||||
gserver->video_plugin = NULL;
|
||||
if((gserver->event = event) != NULL)
|
||||
gserver->event_own = 0;
|
||||
else if((gserver->event = event_new()) == NULL)
|
||||
|
@ -67,30 +98,32 @@ static int _new_init(AppServerOptions options, GServer * gserver, Event * event)
|
|||
}
|
||||
|
||||
static int _init_video(GServer * gserver)
|
||||
/* FIXME ask Hardware what to load instead of hard-coding vesa */
|
||||
/* FIXME ask Hardware what to load instead of hard-coding glx */
|
||||
{
|
||||
void * handle;
|
||||
VideoPlugin * video;
|
||||
char const filename[] = PREFIX "/lib/" PACKAGE "/video/glx.so";
|
||||
|
||||
if((handle = dlopen("video/vesa.so", RTLD_LAZY)) == NULL)
|
||||
if((gserver->video_handle = dlopen(filename, RTLD_LAZY)) == NULL)
|
||||
return error_set_code(1, "%s: %s", filename, dlerror());
|
||||
if((gserver->video_plugin = dlsym(gserver->video_handle,
|
||||
"video_plugin")) == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s%s%s", "GServer: vesa: ", dlerror(), "\n");
|
||||
error_set_code(1, "%s: %s", filename, dlerror());
|
||||
dlclose(gserver->video_handle);
|
||||
return 1;
|
||||
}
|
||||
if((video = dlsym(handle, "video_plugin")) == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s%s%s", "GServer: vesa: ", dlerror(), "\n");
|
||||
dlclose(handle);
|
||||
return 1;
|
||||
}
|
||||
video->init();
|
||||
gserver->video_plugin->init();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* gserver_delete */
|
||||
static void _destroy_video(GServer * gserver);
|
||||
|
||||
void gserver_delete(GServer * gserver)
|
||||
{
|
||||
if(_gserver == gserver)
|
||||
_gserver = NULL;
|
||||
_destroy_video(gserver);
|
||||
if(gserver->appserver != NULL)
|
||||
appserver_delete(gserver->appserver);
|
||||
if(gserver->event != NULL)
|
||||
|
@ -98,6 +131,14 @@ void gserver_delete(GServer * gserver)
|
|||
object_delete(gserver);
|
||||
}
|
||||
|
||||
static void _destroy_video(GServer * gserver)
|
||||
{
|
||||
if(gserver->video_plugin != NULL)
|
||||
gserver->video_plugin->destroy();
|
||||
if(gserver->video_handle != NULL)
|
||||
dlclose(gserver->video_handle);
|
||||
}
|
||||
|
||||
|
||||
/* useful */
|
||||
int gserver_loop(GServer * gserver)
|
||||
|
@ -108,3 +149,110 @@ int gserver_loop(GServer * gserver)
|
|||
ret |= event_loop(gserver->event);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* interface */
|
||||
/* GServer_glBegin */
|
||||
void GServer_glBegin(uint32_t mode)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glBegin(mode);
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glClear */
|
||||
void GServer_glClear(uint32_t mask)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glClear(mask);
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glClearColor */
|
||||
void GServer_glClearColor(float red, float green, float blue, float alpha)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glClearColor(red, green, blue, alpha);
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glClearDepth */
|
||||
void GServer_glClearDepth(double depth)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glClearDepth(depth);
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glColor3f */
|
||||
void GServer_glColor3f(float red, float green, float blue)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glColor3f(red, green, blue);
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glColor3i */
|
||||
void GServer_glColor3i(int32_t red, int32_t green, int32_t blue)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glColor3i(red, green, blue);
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glEnd */
|
||||
void GServer_glEnd(void)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glEnd();
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glFlush */
|
||||
void GServer_glFlush(void)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glFlush();
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glLoadIdentity */
|
||||
void GServer_glLoadIdentity(void)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glLoadIdentity();
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glTranslatef */
|
||||
void GServer_glTranslatef(float x, float y, float z)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glTranslatef(x, y, z);
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glVertex3i */
|
||||
void GServer_glVertex3i(int32_t x, int32_t y, int32_t z)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glVertex3i(x, y, z);
|
||||
}
|
||||
|
||||
|
||||
/* GServer_glVertex3f */
|
||||
void GServer_glVertex3f(float x, float y, float z)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
glVertex3f(x, y, z);
|
||||
}
|
||||
|
||||
|
||||
/* GServer_SwapBuffers */
|
||||
void GServer_SwapBuffers(void)
|
||||
{
|
||||
DEBUG_INTERFACE();
|
||||
if(_gserver != NULL && _gserver->video_plugin != NULL
|
||||
&& _gserver->video_plugin->swap_buffers != NULL)
|
||||
_gserver->video_plugin->swap_buffers();
|
||||
}
|
||||
|
|
|
@ -1,6 +1,17 @@
|
|||
/* $Id$ */
|
||||
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Graphics GServer */
|
||||
/* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
|
||||
|
|
11
src/main.c
11
src/main.c
|
@ -1,6 +1,17 @@
|
|||
/* $Id$ */
|
||||
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Graphics GServer */
|
||||
/* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,18 +1,23 @@
|
|||
subdirs=video
|
||||
targets=GServer
|
||||
cppflags_force=-I $(PREFIX)/include
|
||||
cflags_force=-W `pkg-config --cflags glu`
|
||||
targets=../data/GServer.h,GServer
|
||||
cppflags=-I $(PREFIX)/include
|
||||
cflags_force=-W `pkg-config --cflags gl`
|
||||
cflags=-Wall -g -O2 -pedantic
|
||||
ldflags_force=-lSystem `pkg-config --libs glu`
|
||||
ldflags_force=-lSystem `pkg-config --libs glu` -Wl,-export-dynamic
|
||||
ldflags=-L$(PREFIX)/lib -Wl,-rpath,$(PREFIX)/lib
|
||||
dist=Makefile,gserver.h
|
||||
|
||||
[../data/GServer.h]
|
||||
type=script
|
||||
script=./appbroker.sh
|
||||
depends=../data/GServer.interface
|
||||
|
||||
[GServer]
|
||||
type=binary
|
||||
sources=gserver.c,main.c
|
||||
|
||||
[gserver.c]
|
||||
depends=gserver.h
|
||||
depends=gserver.h,../data/GServer.h,../config.h
|
||||
|
||||
[main.c]
|
||||
depends=gserver.h
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
TARGETS = vesa.a vesa.so
|
||||
TARGETS = glx.so vesa.so
|
||||
PREFIX = /usr/local
|
||||
DESTDIR =
|
||||
LIBDIR = $(PREFIX)/lib
|
||||
|
@ -18,31 +18,43 @@ INSTALL = install
|
|||
|
||||
all: $(TARGETS)
|
||||
|
||||
glx_OBJS = glx.o
|
||||
glx_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||
glx_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||
|
||||
glx.so: $(glx_OBJS)
|
||||
$(LD) -o glx.so $(glx_OBJS)
|
||||
|
||||
vesa_OBJS = vbe.o vesa.o
|
||||
vesa_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||
vesa_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||
|
||||
vesa.a: $(vesa_OBJS)
|
||||
$(AR) vesa.a $(vesa_OBJS)
|
||||
$(RANLIB) vesa.a
|
||||
|
||||
vesa.so: $(vesa_OBJS)
|
||||
$(LD) -o vesa.so -Wl,-soname,vesa.so.0 $(vesa_OBJS)
|
||||
$(LD) -o vesa.so $(vesa_OBJS)
|
||||
|
||||
glx.o: glx.c video.h
|
||||
$(CC) $(glx_CFLAGS) `pkg-config --cflags gl` -c glx.c
|
||||
|
||||
vbe.o: vbe.c
|
||||
$(CC) $(vesa_CFLAGS) -c vbe.c
|
||||
|
||||
vesa.o: vesa.c
|
||||
vesa.o: vesa.c video.h
|
||||
$(CC) $(vesa_CFLAGS) -c vesa.c
|
||||
|
||||
clean:
|
||||
$(RM) -- $(vesa_OBJS)
|
||||
$(RM) -- $(glx_OBJS) $(vesa_OBJS)
|
||||
|
||||
distclean: clean
|
||||
$(RM) -- $(TARGETS)
|
||||
|
||||
install: all
|
||||
$(MKDIR) $(DESTDIR)$(PREFIX)/lib/GServer/video
|
||||
$(INSTALL) -m 0644 -- glx.so $(DESTDIR)$(PREFIX)/lib/GServer/video/glx.so
|
||||
$(MKDIR) $(DESTDIR)$(PREFIX)/lib/GServer/video
|
||||
$(INSTALL) -m 0644 -- vesa.so $(DESTDIR)$(PREFIX)/lib/GServer/video/vesa.so
|
||||
|
||||
uninstall:
|
||||
$(RM) -- $(DESTDIR)$(PREFIX)/lib/GServer/video/glx.so
|
||||
$(RM) -- $(DESTDIR)$(PREFIX)/lib/GServer/video/vesa.so
|
||||
|
||||
.PHONY: all clean distclean install uninstall
|
||||
|
|
162
src/video/glx.c
Normal file
162
src/video/glx.c
Normal file
|
@ -0,0 +1,162 @@
|
|||
/* $Id$ */
|
||||
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Graphics GServer */
|
||||
/* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
# include <stdio.h>
|
||||
#endif
|
||||
#include <string.h>
|
||||
#include <GL/glx.h>
|
||||
#include <GL/glu.h>
|
||||
#include "video.h"
|
||||
|
||||
|
||||
/* GLX */
|
||||
/* private */
|
||||
/* prototypes */
|
||||
static int _glx_init(void);
|
||||
static void _glx_destroy(void);
|
||||
static void _glx_swap_buffers(void);
|
||||
|
||||
|
||||
/* variables */
|
||||
static Display * _display;
|
||||
static Window _window;
|
||||
|
||||
|
||||
/* public */
|
||||
/* variables */
|
||||
VideoPlugin video_plugin =
|
||||
{
|
||||
_glx_init,
|
||||
_glx_destroy,
|
||||
_glx_swap_buffers
|
||||
};
|
||||
|
||||
|
||||
/* private */
|
||||
/* functions */
|
||||
/* glx_init */
|
||||
static int _glx_init(void)
|
||||
{
|
||||
int screen;
|
||||
int attributes[] = { GLX_RGBA, GLX_RED_SIZE, 4, GLX_GREEN_SIZE, 4,
|
||||
GLX_BLUE_SIZE, 4, GLX_DEPTH_SIZE, 16, GLX_DOUBLEBUFFER, None };
|
||||
XVisualInfo * vi;
|
||||
GLXContext context;
|
||||
XSetWindowAttributes attr;
|
||||
Atom wdelete;
|
||||
int x;
|
||||
int y;
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int depth;
|
||||
Window wdummy;
|
||||
unsigned int bdummy;
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
||||
#endif
|
||||
_display = XOpenDisplay(0);
|
||||
screen = DefaultScreen(_display);
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "DEBUG: %s() screen=%d\n", __func__, screen);
|
||||
#endif
|
||||
if((vi = glXChooseVisual(_display, screen, attributes)) == NULL)
|
||||
{
|
||||
attributes[(sizeof(attributes) / sizeof(*attributes)) - 2]
|
||||
= None;
|
||||
vi = glXChooseVisual(_display, screen, attributes);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "DEBUG: %s() got visual\n", __func__);
|
||||
#endif
|
||||
context = glXCreateContext(_display, vi, 0, GL_TRUE);
|
||||
memset(&attr, 0, sizeof(attr));
|
||||
attr.colormap = XCreateColormap(_display, RootWindow(_display,
|
||||
vi->screen), vi->visual, AllocNone);
|
||||
attr.border_pixel = 0;
|
||||
attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask
|
||||
| StructureNotifyMask;
|
||||
_window = XCreateWindow(_display, RootWindow(_display, vi->screen),
|
||||
0, 0, 640, 480, 0, vi->depth, InputOutput, vi->visual,
|
||||
CWBorderPixel | CWColormap | CWEventMask, &attr);
|
||||
wdelete = XInternAtom(_display, "WM_DELETE_WINDOW", True);
|
||||
XSetWMProtocols(_display, _window, &wdelete, 1);
|
||||
XSetStandardProperties(_display, _window, "GServer GLX", "GServer GLX",
|
||||
None, NULL, 0, NULL);
|
||||
XMapRaised(_display, _window);
|
||||
glXMakeCurrent(_display, _window, context);
|
||||
XGetGeometry(_display, _window, &wdummy, &x, &y, &width, &height,
|
||||
&bdummy, &depth);
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "DEBUG: %s() (%d,%d) (%ux%u@%u)\n", __func__, x, y,
|
||||
width, height, depth);
|
||||
#endif
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
glClearDepth(1.0f);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
||||
glViewport(0, 0, width, height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
if(height == 0)
|
||||
height = 1;
|
||||
gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glFlush();
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glXSwapBuffers(_display, _window);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* glx_destroy */
|
||||
static void _glx_destroy(void)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "DEBUG: %s()\n", __func__);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* glx_swap_buffers */
|
||||
static void _glx_swap_buffers(void)
|
||||
{
|
||||
#if 0
|
||||
XEvent event;
|
||||
|
||||
while(XPending(_display) > 0)
|
||||
{
|
||||
XNextEvent(_display, &event);
|
||||
}
|
||||
#endif
|
||||
glViewport(0, 0, 640, 480);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluPerspective(45.0f, (GLfloat)640 / (GLfloat)480, 0.1f, 100.0f);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glTranslatef(3.0f, 0.0f, 0.0f);
|
||||
glBegin(GL_QUADS);
|
||||
glVertex3f(-1.0f, 1.0f, 0.0f);
|
||||
glVertex3f(1.0f, 1.0f, 0.0f);
|
||||
glVertex3f(1.0f, -1.0f, 0.0f);
|
||||
glVertex3f(-1.0f, -1.0f, 0.0f);
|
||||
glEnd();
|
||||
glXSwapBuffers(_display, _window);
|
||||
}
|
|
@ -1,8 +1,21 @@
|
|||
targets=vesa
|
||||
targets=glx,vesa
|
||||
cflags_force=-W
|
||||
cflags=-Wall -g -O2 -fPIC -pedantic
|
||||
dist=Makefile,vbe.h,video.h
|
||||
|
||||
[glx]
|
||||
type=plugin
|
||||
sources=glx.c
|
||||
install=$(PREFIX)/lib/GServer/video
|
||||
|
||||
[glx.c]
|
||||
cflags=`pkg-config --cflags gl`
|
||||
depends=video.h
|
||||
|
||||
[vesa]
|
||||
type=library
|
||||
type=plugin
|
||||
sources=vbe.c,vesa.c
|
||||
install=$(PREFIX)/lib/GServer/video
|
||||
|
||||
[vesa.c]
|
||||
depends=video.h
|
||||
|
|
|
@ -1,9 +1,22 @@
|
|||
/* video/vbe.h */
|
||||
/* $Id$ */
|
||||
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Graphics GServer */
|
||||
/* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
|
||||
#ifndef __VIDEO_VBE_H
|
||||
# define __VIDEO_VBE_H
|
||||
#ifndef GSERVER_VIDEO_VBE_H
|
||||
# define GSERVER_VIDEO_VBE_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
@ -31,4 +44,4 @@ typedef struct _VbeInfo
|
|||
/* functions */
|
||||
int vbe_info(VbeInfo * buf);
|
||||
|
||||
#endif /* !__VIDEO_VBE_H */
|
||||
#endif /* !GSERVER_VIDEO_VBE_H */
|
||||
|
|
|
@ -1,25 +1,45 @@
|
|||
/* video/vesa.c */
|
||||
/* $Id$ */
|
||||
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Graphics GServer */
|
||||
/* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
|
||||
#include <stddef.h>
|
||||
#include "video.h"
|
||||
#include "vbe.h"
|
||||
|
||||
|
||||
/* private */
|
||||
/* functions */
|
||||
int vesa_init(void)
|
||||
/* vesa_init */
|
||||
static int _vesa_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void vesa_destroy()
|
||||
/* vesa_destroy */
|
||||
static void _vesa_destroy(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/* public */
|
||||
/* variables */
|
||||
VideoPlugin video_plugin =
|
||||
{
|
||||
vesa_init,
|
||||
vesa_destroy
|
||||
_vesa_init,
|
||||
_vesa_destroy,
|
||||
NULL
|
||||
};
|
||||
|
|
|
@ -1,17 +1,31 @@
|
|||
/* video/video.h */
|
||||
/* $Id$ */
|
||||
/* Copyright (c) 2010 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Graphics GServer */
|
||||
/* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 3 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
|
||||
#ifndef __VIDEO_VIDEO_H
|
||||
# define __VIDEO_VIDEO_H
|
||||
#ifndef GSERVER_VIDEO_VIDEO_H
|
||||
# define GSERVER_VIDEO_VIDEO_H
|
||||
|
||||
|
||||
/* Video */
|
||||
/* types */
|
||||
typedef struct _VideoPlugin
|
||||
{
|
||||
int (* init)(void);
|
||||
void (* destroy)(void);
|
||||
int (*init)(void);
|
||||
void (*destroy)(void);
|
||||
void (*swap_buffers)(void);
|
||||
} VideoPlugin;
|
||||
|
||||
#endif /* !__VIDEO_VIDEO_H */
|
||||
#endif /* !GSERVER_VIDEO_VIDEO_H */
|
||||
|
|
Loading…
Reference in New Issue
Block a user