Remove VGA text mode support from libdispd.
This commit is contained in:
parent
0e577950c0
commit
49e2c933af
|
@ -38,8 +38,6 @@ struct dispd_framebuffer
|
||||||
int bpp;
|
int bpp;
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
bool is_vga;
|
|
||||||
bool is_rgba;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
|
|
|
@ -67,31 +67,8 @@ bool dispd_detach_session(struct dispd_session* session)
|
||||||
return true;
|
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;
|
|
||||||
if ( (session->is_vga = !(msg.mode.control & 1)) )
|
|
||||||
return true;
|
|
||||||
error(0, 0, "This program requires a VGA Text Mode buffer, but you are "
|
|
||||||
"currently using an incompatible (perhaps graphics) mode.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool dispd_session_setup_game_rgba(struct dispd_session* session)
|
bool dispd_session_setup_game_rgba(struct dispd_session* session)
|
||||||
{
|
{
|
||||||
if ( session->is_vga )
|
|
||||||
return false;
|
|
||||||
if ( session->is_rgba )
|
if ( session->is_rgba )
|
||||||
return true;
|
return true;
|
||||||
if ( session->current_window )
|
if ( session->current_window )
|
||||||
|
|
|
@ -35,7 +35,6 @@ struct dispd_session
|
||||||
uint64_t device;
|
uint64_t device;
|
||||||
uint64_t connector;
|
uint64_t connector;
|
||||||
struct dispd_window* current_window;
|
struct dispd_window* current_window;
|
||||||
bool is_vga;
|
|
||||||
bool is_rgba;
|
bool is_rgba;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -39,23 +39,6 @@
|
||||||
#include "session.h"
|
#include "session.h"
|
||||||
#include "window.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"
|
extern "C"
|
||||||
struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session)
|
struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session)
|
||||||
{
|
{
|
||||||
|
@ -69,7 +52,6 @@ struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session
|
||||||
return NULL;
|
return NULL;
|
||||||
memset(window, 0, sizeof(*window));
|
memset(window, 0, sizeof(*window));
|
||||||
window->session = session;
|
window->session = session;
|
||||||
window->is_rgba = true;
|
|
||||||
return session->current_window = window;
|
return session->current_window = window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,28 +87,7 @@ static void return_buffer(struct dispd_window* window, uint8_t* b, size_t size)
|
||||||
window->cached_buffer_size = size;
|
window->cached_buffer_size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
struct dispd_framebuffer* dispd_begin_render(struct dispd_window* window)
|
||||||
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*) request_buffer(window, 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;
|
struct dispmsg_get_crtc_mode msg;
|
||||||
msg.msgid = DISPMSG_GET_CRTC_MODE;
|
msg.msgid = DISPMSG_GET_CRTC_MODE;
|
||||||
|
@ -140,7 +101,6 @@ struct dispd_framebuffer* disp_begin_render_rgba(struct dispd_window* window)
|
||||||
return NULL;
|
return NULL;
|
||||||
memset(fb, 0, sizeof(*fb));
|
memset(fb, 0, sizeof(*fb));
|
||||||
fb->window = window;
|
fb->window = window;
|
||||||
fb->is_rgba = true;
|
|
||||||
fb->width = msg.mode.view_xres;
|
fb->width = msg.mode.view_xres;
|
||||||
fb->height = msg.mode.view_yres;
|
fb->height = msg.mode.view_yres;
|
||||||
fb->bpp = 32;
|
fb->bpp = 32;
|
||||||
|
@ -151,32 +111,10 @@ struct dispd_framebuffer* disp_begin_render_rgba(struct dispd_window* window)
|
||||||
return fb;
|
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)
|
bool dispd_finish_render(struct dispd_framebuffer* fb)
|
||||||
{
|
{
|
||||||
struct dispd_window* window = fb->window;
|
struct dispd_window* window = fb->window;
|
||||||
bool ret = false;
|
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;
|
struct dispmsg_write_memory msg;
|
||||||
msg.msgid = DISPMSG_WRITE_MEMORY;
|
msg.msgid = DISPMSG_WRITE_MEMORY;
|
||||||
msg.device = window->session->device;
|
msg.device = window->session->device;
|
||||||
|
@ -185,7 +123,6 @@ bool dispd_finish_render(struct dispd_framebuffer* fb)
|
||||||
msg.src = fb->data;
|
msg.src = fb->data;
|
||||||
if ( dispmsg_issue(&msg, sizeof(msg)) == 0 )
|
if ( dispmsg_issue(&msg, sizeof(msg)) == 0 )
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
|
||||||
return_buffer(window, fb->data, fb->datasize);
|
return_buffer(window, fb->data, fb->datasize);
|
||||||
free(fb);
|
free(fb);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -203,7 +140,7 @@ size_t dispd_get_framebuffer_pitch(struct dispd_framebuffer* fb)
|
||||||
|
|
||||||
int dispd_get_framebuffer_format(struct dispd_framebuffer* fb)
|
int dispd_get_framebuffer_format(struct dispd_framebuffer* fb)
|
||||||
{
|
{
|
||||||
return fb->is_vga ? 0 : fb->bpp;
|
return fb->bpp;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dispd_get_framebuffer_height(struct dispd_framebuffer* fb)
|
int dispd_get_framebuffer_height(struct dispd_framebuffer* fb)
|
||||||
|
|
|
@ -34,8 +34,6 @@ struct dispd_window
|
||||||
struct dispd_session* session;
|
struct dispd_session* session;
|
||||||
uint8_t* cached_buffer;
|
uint8_t* cached_buffer;
|
||||||
size_t cached_buffer_size;
|
size_t cached_buffer_size;
|
||||||
bool is_vga;
|
|
||||||
bool is_rgba;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
|
|
|
@ -44,10 +44,8 @@ bool dispd_initialize(int* argc, char*** argv);
|
||||||
struct dispd_session* dispd_attach_default_session();
|
struct dispd_session* dispd_attach_default_session();
|
||||||
bool dispd_detach_session(struct dispd_session* 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);
|
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);
|
struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session);
|
||||||
bool dispd_destroy_window(struct dispd_window* window);
|
bool dispd_destroy_window(struct dispd_window* window);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue