Add dispd client library and server stub.
This commit is contained in:
parent
0095983c80
commit
d00bc41c74
5
Makefile
5
Makefile
|
@ -6,6 +6,11 @@ ifneq ($(BUILD_LIBC),0)
|
||||||
endif
|
endif
|
||||||
ALLMODULES:=$(ALLMODULES) libc
|
ALLMODULES:=$(ALLMODULES) libc
|
||||||
|
|
||||||
|
ifneq ($(BUILD_DISPD),0)
|
||||||
|
MODULES:=$(MODULES) dispd
|
||||||
|
endif
|
||||||
|
ALLMODULES:=$(ALLMODULES) dispd
|
||||||
|
|
||||||
ifneq ($(BUILD_GAMES),0)
|
ifneq ($(BUILD_GAMES),0)
|
||||||
MODULES:=$(MODULES) games
|
MODULES:=$(MODULES) games
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
*.a
|
||||||
|
*.o
|
||||||
|
server/dispd
|
|
@ -0,0 +1,78 @@
|
||||||
|
include ../compiler.mak
|
||||||
|
include ../version.mak
|
||||||
|
include ../dirs.mak
|
||||||
|
|
||||||
|
ifndef OPTLEVEL
|
||||||
|
OPTLEVEL:=-O2
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef CXXFLAGS
|
||||||
|
CXXFLAGS:=$(OPTLEVEL)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CXXFLAGS:=$(CXXFLAGS) -Wall -Wextra -fno-exceptions -fno-rtti
|
||||||
|
CPPFLAGS:=$(CPPFLAGS) -I include
|
||||||
|
|
||||||
|
CLIENT_OBJS:=\
|
||||||
|
client/library.o \
|
||||||
|
client/session.o \
|
||||||
|
client/window.o \
|
||||||
|
|
||||||
|
SERVER_OBJS:=\
|
||||||
|
server/dispd.o \
|
||||||
|
|
||||||
|
BINS:=server/dispd client/libdispd.a
|
||||||
|
|
||||||
|
all: $(BINS)
|
||||||
|
|
||||||
|
.PHONY: all headers client server clean install install-include-dirs \
|
||||||
|
install-headers install-client-dirs install-client install-server-dirs \
|
||||||
|
install-server
|
||||||
|
|
||||||
|
headers:
|
||||||
|
|
||||||
|
client: client/libdispd.a
|
||||||
|
|
||||||
|
client/libdispd.a: $(CLIENT_OBJS)
|
||||||
|
$(HOSTAR) rcs $@ $(CLIENT_OBJS)
|
||||||
|
|
||||||
|
server: server/dispd
|
||||||
|
|
||||||
|
server/dispd: $(SERVER_OBJS)
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(SERVER_OBJS) -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(CLIENT_OBJS) $(SERVER_OBJS)
|
||||||
|
rm -f $(BINS)
|
||||||
|
rm -f *.o client/*.o server/*.o
|
||||||
|
|
||||||
|
%.o: %.cpp
|
||||||
|
$(HOSTCXX) -c $< -o $@ $(CPPFLAGS) $(CXXFLAGS)
|
||||||
|
|
||||||
|
# Installation into sysroot
|
||||||
|
install: install-headers install-client install-server
|
||||||
|
|
||||||
|
install-include-dirs: headers
|
||||||
|
mkdir -p $(INSTALLINCLUDEDIR)
|
||||||
|
for D in $$(find include/ -type d | sed 's/include\/*//'); do \
|
||||||
|
mkdir -p $(INSTALLINCLUDEDIR)/$$D || exit $?; \
|
||||||
|
done
|
||||||
|
|
||||||
|
install-headers: install-include-dirs headers
|
||||||
|
for SRC in $$(find include/ -type f); do \
|
||||||
|
DEST=`echo $$SRC | sed 's/include\///'`; \
|
||||||
|
cp -P $$SRC $(INSTALLINCLUDEDIR)/$$DEST || exit $?; \
|
||||||
|
done
|
||||||
|
|
||||||
|
install-client-dirs:
|
||||||
|
mkdir -p $(INSTALLLIBDIR)
|
||||||
|
mkdir -p $(INSTALLLIBDIR)/$(HOST)
|
||||||
|
|
||||||
|
install-client: install-client-dirs
|
||||||
|
cp -P client/libdispd.a $(INSTALLLIBDIR)/$(HOST)
|
||||||
|
|
||||||
|
install-server-dirs:
|
||||||
|
mkdir -p $(INSTALLBINDIR)/$(HOST)
|
||||||
|
|
||||||
|
install-server: install-server-dirs
|
||||||
|
install server/dispd $(INSTALLBINDIR)/$(HOST)
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Copyright(C) Jonas 'Sortie' Termansen 2012.
|
||||||
|
|
||||||
|
This file is part of dispd.
|
||||||
|
|
||||||
|
dispd is free software: you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
dispd 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 Lesser General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with dispd. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
framebuffer.h
|
||||||
|
Keeps track of framebuffers.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef INCLUDE_DISPD_FRAMEBUFFER_H
|
||||||
|
#define INCLUDE_DISPD_FRAMEBUFFER_H
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct dispd_framebuffer
|
||||||
|
{
|
||||||
|
struct dispd_window* window;
|
||||||
|
uint8_t* data;
|
||||||
|
size_t datasize;
|
||||||
|
size_t pitch;
|
||||||
|
int bpp;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
bool is_vga;
|
||||||
|
bool is_rgba;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
} // extern "C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Copyright(C) Jonas 'Sortie' Termansen 2012.
|
||||||
|
|
||||||
|
This file is part of dispd.
|
||||||
|
|
||||||
|
dispd is free software: you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
dispd 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 Lesser General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with dispd. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
library.cpp
|
||||||
|
Main entry point of the Sortix Display Daemon.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include <dispd.h>
|
||||||
|
|
||||||
|
#include "session.h"
|
||||||
|
|
||||||
|
extern "C" bool dispd_initialize(int* argc, char*** argv)
|
||||||
|
{
|
||||||
|
if ( !dispd__session_initialize(argc, argv) )
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -0,0 +1,125 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Copyright(C) Jonas 'Sortie' Termansen 2012.
|
||||||
|
|
||||||
|
This file is part of dispd.
|
||||||
|
|
||||||
|
dispd is free software: you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
dispd 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 Lesser General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with dispd. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
session.cpp
|
||||||
|
Handles session management.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/display.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <dispd.h>
|
||||||
|
|
||||||
|
#include "session.h"
|
||||||
|
|
||||||
|
const uint64_t ONE_AND_ONLY_DEVICE = 0;
|
||||||
|
const uint64_t ONE_AND_ONLY_CONNECTOR = 0;
|
||||||
|
|
||||||
|
struct dispd_session* global_session = NULL;
|
||||||
|
|
||||||
|
bool dispd__session_initialize(int* /*argc*/, char*** /*argv*/)
|
||||||
|
{
|
||||||
|
size_t size = sizeof(struct dispd_session);
|
||||||
|
global_session = (struct dispd_session*) malloc(size);
|
||||||
|
if ( !global_session )
|
||||||
|
return false;
|
||||||
|
memset(global_session, 0, sizeof(*global_session));
|
||||||
|
global_session->device = ONE_AND_ONLY_DEVICE;
|
||||||
|
global_session->connector = ONE_AND_ONLY_CONNECTOR;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct dispd_session* dispd_attach_default_session()
|
||||||
|
{
|
||||||
|
global_session->refcount++;
|
||||||
|
return global_session;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dispd_detach_session(struct dispd_session* session)
|
||||||
|
{
|
||||||
|
session->refcount--;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dispd_session_setup_game_vga(struct dispd_session* session)
|
||||||
|
{
|
||||||
|
if ( session->is_vga )
|
||||||
|
return true;
|
||||||
|
if ( session->is_rgba )
|
||||||
|
return false;
|
||||||
|
if ( session->current_window )
|
||||||
|
return false;
|
||||||
|
struct dispmsg_get_crtc_mode msg;
|
||||||
|
msg.msgid = DISPMSG_GET_CRTC_MODE;
|
||||||
|
msg.device = session->device;
|
||||||
|
msg.connector = session->connector;
|
||||||
|
if ( dispmsg_issue(&msg, sizeof(msg)) != 0 )
|
||||||
|
return false;
|
||||||
|
return session->is_vga = (msg.mode.control & 1)== 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dispd_session_setup_game_rgba(struct dispd_session* session)
|
||||||
|
{
|
||||||
|
if ( session->is_vga )
|
||||||
|
return false;
|
||||||
|
if ( session->is_rgba )
|
||||||
|
return true;
|
||||||
|
if ( session->current_window )
|
||||||
|
return false;
|
||||||
|
struct dispmsg_get_crtc_mode msg;
|
||||||
|
msg.msgid = DISPMSG_GET_CRTC_MODE;
|
||||||
|
msg.device = session->device;
|
||||||
|
msg.connector = session->connector;
|
||||||
|
if ( dispmsg_issue(&msg, sizeof(msg)) != 0 )
|
||||||
|
return false;
|
||||||
|
if ( !(msg.mode.control & 1) || msg.mode.fb_format != 32 )
|
||||||
|
{
|
||||||
|
pid_t childpid = fork();
|
||||||
|
if ( childpid < 0 )
|
||||||
|
return false;
|
||||||
|
if ( childpid )
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
waitpid(childpid, &status, 0);
|
||||||
|
return session->is_rgba = (WIFEXITED(status) && !WEXITSTATUS(status));
|
||||||
|
}
|
||||||
|
const char* chvideomode = "chvideomode";
|
||||||
|
#if 1
|
||||||
|
// TODO chvideomode currently launches --bpp 32 as a program...
|
||||||
|
execlp(chvideomode, chvideomode, NULL);
|
||||||
|
#else
|
||||||
|
execlp(chvideomode, chvideomode,
|
||||||
|
"--bpp", "32",
|
||||||
|
"--show-graphics", "true",
|
||||||
|
"--show-text", "false",
|
||||||
|
NULL);
|
||||||
|
#endif
|
||||||
|
perror(chvideomode);
|
||||||
|
exit(127);
|
||||||
|
}
|
||||||
|
return session->is_rgba = true;
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Copyright(C) Jonas 'Sortie' Termansen 2012.
|
||||||
|
|
||||||
|
This file is part of dispd.
|
||||||
|
|
||||||
|
dispd is free software: you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
dispd 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 Lesser General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with dispd. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
session.h
|
||||||
|
Handles session management.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef INCLUDE_DISPD_SESSION_H
|
||||||
|
#define INCLUDE_DISPD_SESSION_H
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct dispd_session
|
||||||
|
{
|
||||||
|
size_t refcount;
|
||||||
|
uint64_t device;
|
||||||
|
uint64_t connector;
|
||||||
|
struct dispd_window* current_window;
|
||||||
|
bool is_vga;
|
||||||
|
bool is_rgba;
|
||||||
|
};
|
||||||
|
|
||||||
|
bool dispd__session_initialize(int* argc, char*** argv);
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
} // extern "C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,190 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Copyright(C) Jonas 'Sortie' Termansen 2012.
|
||||||
|
|
||||||
|
This file is part of dispd.
|
||||||
|
|
||||||
|
dispd is free software: you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
dispd 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 Lesser General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with dispd. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
window.cpp
|
||||||
|
Handles windows.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/display.h>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <dispd.h>
|
||||||
|
|
||||||
|
#include "framebuffer.h"
|
||||||
|
#include "session.h"
|
||||||
|
#include "window.h"
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
struct dispd_window* dispd_create_window_game_vga(struct dispd_session* session)
|
||||||
|
{
|
||||||
|
if ( session->current_window )
|
||||||
|
return NULL;
|
||||||
|
if ( !session->is_vga )
|
||||||
|
return NULL;
|
||||||
|
size_t size = sizeof(struct dispd_window);
|
||||||
|
struct dispd_window* window = (struct dispd_window*) malloc(size);
|
||||||
|
if ( !window )
|
||||||
|
return NULL;
|
||||||
|
memset(window, 0, sizeof(*window));
|
||||||
|
window->session = session;
|
||||||
|
window->is_vga = true;
|
||||||
|
return session->current_window = window;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session)
|
||||||
|
{
|
||||||
|
if ( session->current_window )
|
||||||
|
return NULL;
|
||||||
|
if ( !session->is_rgba )
|
||||||
|
return NULL;
|
||||||
|
size_t size = sizeof(struct dispd_window);
|
||||||
|
struct dispd_window* window = (struct dispd_window*) malloc(size);
|
||||||
|
if ( !window )
|
||||||
|
return NULL;
|
||||||
|
memset(window, 0, sizeof(*window));
|
||||||
|
window->session = session;
|
||||||
|
window->is_rgba = true;
|
||||||
|
return session->current_window = window;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" bool dispd_destroy_window(struct dispd_window* window)
|
||||||
|
{
|
||||||
|
free(window);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
struct dispd_framebuffer* disp_begin_render_vga(struct dispd_window* window)
|
||||||
|
{
|
||||||
|
size_t size = sizeof(struct dispd_framebuffer);
|
||||||
|
struct dispd_framebuffer* fb = (struct dispd_framebuffer*) malloc(size);
|
||||||
|
if ( !fb )
|
||||||
|
return NULL;
|
||||||
|
memset(fb, 0, sizeof(*fb));
|
||||||
|
fb->is_vga = true;
|
||||||
|
fb->window = window;
|
||||||
|
fb->width = 80;
|
||||||
|
fb->height = 25;
|
||||||
|
fb->bpp = 16;
|
||||||
|
fb->pitch = fb->width * fb->bpp / 8;
|
||||||
|
fb->datasize = fb->pitch * fb->height;
|
||||||
|
fb->data = (uint8_t*) malloc(fb->datasize);
|
||||||
|
if ( !fb->data ) { free(fb); return NULL; }
|
||||||
|
return fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
struct dispd_framebuffer* disp_begin_render_rgba(struct dispd_window* window)
|
||||||
|
{
|
||||||
|
struct dispmsg_get_crtc_mode msg;
|
||||||
|
msg.msgid = DISPMSG_GET_CRTC_MODE;
|
||||||
|
msg.device = window->session->device;
|
||||||
|
msg.connector = window->session->connector;
|
||||||
|
if ( dispmsg_issue(&msg, sizeof(msg)) != 0 )
|
||||||
|
return NULL;
|
||||||
|
size_t size = sizeof(struct dispd_framebuffer);
|
||||||
|
struct dispd_framebuffer* fb = (struct dispd_framebuffer*) malloc(size);
|
||||||
|
if ( !fb )
|
||||||
|
return NULL;
|
||||||
|
memset(fb, 0, sizeof(*fb));
|
||||||
|
fb->window = window;
|
||||||
|
fb->is_rgba = true;
|
||||||
|
fb->width = msg.mode.view_xres;
|
||||||
|
fb->height = msg.mode.view_yres;
|
||||||
|
fb->bpp = 32;
|
||||||
|
fb->pitch = fb->width * fb->bpp / 8;
|
||||||
|
fb->datasize = fb->pitch * fb->height;
|
||||||
|
fb->data = (uint8_t*) malloc(fb->datasize);
|
||||||
|
if ( !fb->data ) { free(fb); return NULL; }
|
||||||
|
return fb;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct dispd_framebuffer* dispd_begin_render(struct dispd_window* window)
|
||||||
|
{
|
||||||
|
if ( window->is_vga )
|
||||||
|
return disp_begin_render_vga(window);
|
||||||
|
if ( window->is_rgba )
|
||||||
|
return disp_begin_render_rgba(window);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool dispd_finish_render(struct dispd_framebuffer* fb)
|
||||||
|
{
|
||||||
|
struct dispd_window* window = fb->window;
|
||||||
|
bool ret = false;
|
||||||
|
if ( window->is_vga )
|
||||||
|
{
|
||||||
|
int fd = open("/dev/vga", O_WRONLY);
|
||||||
|
if ( 0 <= fd )
|
||||||
|
{
|
||||||
|
if ( writeall(fd, fb->data, fb->datasize) == fb->datasize )
|
||||||
|
ret = true;
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( window->is_rgba )
|
||||||
|
{
|
||||||
|
struct dispmsg_write_memory msg;
|
||||||
|
msg.msgid = DISPMSG_WRITE_MEMORY;
|
||||||
|
msg.device = window->session->device;
|
||||||
|
msg.offset = 0;
|
||||||
|
msg.size = fb->datasize;
|
||||||
|
msg.src = fb->data;
|
||||||
|
if ( dispmsg_issue(&msg, sizeof(msg)) == 0 )
|
||||||
|
ret = true;
|
||||||
|
}
|
||||||
|
free(fb->data);
|
||||||
|
free(fb);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t* dispd_get_framebuffer_data(struct dispd_framebuffer* fb)
|
||||||
|
{
|
||||||
|
return fb->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t dispd_get_framebuffer_pitch(struct dispd_framebuffer* fb)
|
||||||
|
{
|
||||||
|
return fb->pitch;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dispd_get_framebuffer_format(struct dispd_framebuffer* fb)
|
||||||
|
{
|
||||||
|
return fb->is_vga ? 0 : fb->bpp;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dispd_get_framebuffer_height(struct dispd_framebuffer* fb)
|
||||||
|
{
|
||||||
|
return fb->height;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dispd_get_framebuffer_width(struct dispd_framebuffer* fb)
|
||||||
|
{
|
||||||
|
return fb->width;
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Copyright(C) Jonas 'Sortie' Termansen 2012.
|
||||||
|
|
||||||
|
This file is part of dispd.
|
||||||
|
|
||||||
|
dispd is free software: you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
dispd 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 Lesser General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with dispd. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
window.h
|
||||||
|
Handles windows.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef INCLUDE_DISPD_WINDOW_H
|
||||||
|
#define INCLUDE_DISPD_WINDOW_H
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct dispd_window
|
||||||
|
{
|
||||||
|
struct dispd_session* session;
|
||||||
|
bool is_vga;
|
||||||
|
bool is_rgba;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
} // extern "C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Copyright(C) Jonas 'Sortie' Termansen 2012.
|
||||||
|
|
||||||
|
This file is part of dispd.
|
||||||
|
|
||||||
|
dispd is free software: you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
dispd 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 Lesser General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with dispd. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
dispd.h
|
||||||
|
Interface to the Sortix Display Daemon.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#ifndef INCLUDE_DISPD_H
|
||||||
|
#define INCLUDE_DISPD_H
|
||||||
|
|
||||||
|
#if !defined(__cplusplus)
|
||||||
|
#include <stdbool.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct dispd_session;
|
||||||
|
struct dispd_window;
|
||||||
|
struct dispd_framebuffer;
|
||||||
|
|
||||||
|
bool dispd_initialize(int* argc, char*** argv);
|
||||||
|
|
||||||
|
struct dispd_session* dispd_attach_default_session();
|
||||||
|
bool dispd_detach_session(struct dispd_session* session);
|
||||||
|
|
||||||
|
bool dispd_session_setup_game_vga(struct dispd_session* session);
|
||||||
|
bool dispd_session_setup_game_rgba(struct dispd_session* session);
|
||||||
|
|
||||||
|
struct dispd_window* dispd_create_window_game_vga(struct dispd_session* session);
|
||||||
|
struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session);
|
||||||
|
bool dispd_destroy_window(struct dispd_window* window);
|
||||||
|
|
||||||
|
struct dispd_framebuffer* dispd_begin_render(struct dispd_window* window);
|
||||||
|
bool dispd_finish_render(struct dispd_framebuffer* framebuffer);
|
||||||
|
|
||||||
|
uint8_t* dispd_get_framebuffer_data(struct dispd_framebuffer* framebuffer);
|
||||||
|
size_t dispd_get_framebuffer_pitch(struct dispd_framebuffer* framebuffer);
|
||||||
|
int dispd_get_framebuffer_format(struct dispd_framebuffer* framebuffer);
|
||||||
|
int dispd_get_framebuffer_height(struct dispd_framebuffer* framebuffer);
|
||||||
|
int dispd_get_framebuffer_width(struct dispd_framebuffer* framebuffer);
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
} // extern "C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
|
||||||
|
Copyright(C) Jonas 'Sortie' Termansen 2012.
|
||||||
|
|
||||||
|
This file is part of dispd.
|
||||||
|
|
||||||
|
dispd is free software: you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
dispd 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 Lesser General Public License for more
|
||||||
|
details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with dispd. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
dispd.cpp
|
||||||
|
Main entry point of the Sortix Display Daemon.
|
||||||
|
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int main(int /*argc*/, char* /*argv*/[])
|
||||||
|
{
|
||||||
|
fprintf(stderr, "dispd is not implemented as a server yet.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
Loading…
Reference in New Issue