/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at golgotha_source@usa.net (Subject should have "GOLG" in it) ***********************************************************************/ #ifndef __DIRECTX_HH #define __DIRECTX_HH #include "image/depth.hh" #include "image/image16.hh" #include "video/display.hh" #include "video/win32/win32_input.hh" #includevoid dx_error(sw32 result); //class directx_mouse_cursor_class; class directx_display_class : public i4_display_class { protected: i4_image_class *mouse_pict; I4_SCREEN_TYPE *mouse_save, *screen; i4_coord mouse_hot_x,mouse_hot_y; i4_pal_handle_class mouse_pal; i4_color mouse_trans; I4_SCREEN_TYPE *back_buffer; i4_bool win_is_open, exclusive_mode, using_emulation; LPDIRECTDRAW direct_draw_driver; // DirectDraw object LPDIRECTDRAWSURFACE back_surface, primary_surface; // directx_mouse_cursor_class *cursor; i4_draw_context_class *context; public: win32_input_class input; i4_bool saw_last, full_screen; void get_window_pos(sw32 &x, sw32 &y); // this is over-riding in the d3d_display so to search for hardware accelerators virtual i4_bool create_direct_draw(); void destroy_direct_draw(); directx_display_class(); class directx_mode : public i4_display_class::mode { public : directx_display_class *assoc; // pointer to use, so we can confirm we created this mode } amode, cur_mode, *last_found; i4_bool create_back_surface(directx_mode *mode); virtual w16 width() const { return back_buffer->width(); } virtual w16 height() const { return back_buffer->height(); } virtual i4_bool remove_cursor() { return i4_T; } virtual i4_draw_context_class *get_context() { return context; } // called when windows gives us a WM_MOVE message, this tells everyone else interested virtual void move_screen(i4_coord x, i4_coord y); mode *current_mode() { return &cur_mode; } mode *get_first_mode(); mode *get_next_mode(mode *last_mode); virtual i4_bool initialize_mode(mode *which_one); i4_bool open_window(directx_mode *mode); virtual i4_bool close(); virtual void flush(); virtual i4_image_class *get_screen(); i4_bool set_mouse_shape(i4_cursor_class *cursor); virtual i4_bool realize_palette(i4_pal_handle_class pal_id) { return i4_T; // pretend like this works for now } virtual i4_bool lock_mouse_in_place(i4_bool yes_no) { return input.lock_mouse_in_place(yes_no); } virtual i4_bool create_surfaces(directx_mode *mode); virtual void active(i4_bool act); virtual w32 priority(); virtual char *name() const { return "DirectX"; } virtual i4_bool available(); }; #endif