正确输出显示器数量,以及显示模式

This commit is contained in:
hyzboy 2018-11-27 20:20:29 +08:00
parent c4db898439
commit b7248b3e97
4 changed files with 66 additions and 36 deletions

View File

@ -1,3 +1,3 @@
add_executable(NullWindow main.cpp) add_executable(NullWindow main.cpp)
target_link_libraries(NullWindow PRIVATE MathGeoLib glfw GL) target_link_libraries(NullWindow PRIVATE MathGeoLib glfw GL ULRE.RenderDevice)

View File

@ -1,38 +1,68 @@
#include<GLFW/glfw3.h> #include<hgl/render/device/RenderDevice.h>
#include<iostream>
using namespace hgl;
void put(const struct VideoMode *vm)
{
std::cout<<"\t"<<vm->width<<"x"<<vm->height<<","<<vm->bit<<"bits,"<<vm->freq<<"hz";
}
void put(const struct Display *disp)
{
std::cout<<"["<<disp->name.c_str()<<"]["<<disp->width<<"x"<<disp->height<<"]["<<disp->x<<","<<disp->y<<"]"<<std::endl;
std::cout<<"\tcurrent video mode: ";
put(disp->GetCurVideoMode());
std::cout<<std::endl;
const ObjectList<VideoMode> &vml=disp->GetVideoModeList();
for(int i=0;i<vml.GetCount();i++)
{
std::cout<<"\t"<<i<<" : ";
put(vml[i]);
std::cout<<std::endl;
}
}
int main(void) int main(void)
{ {
GLFWwindow* window; RenderDevice *device=CreateRenderDeviceGLFW();
/* Initialize the library */ if(!device)
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{ {
glfwTerminate(); std::cerr<<"Create RenderDevice(GLFW) failed."<<std::endl;
return -1; return -1;
} }
/* Make the window's context current */ if(!device->Init())
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{ {
/* Render here */ std::cerr<<"Init RenderDevice(GLFW) failed."<<std::endl;
glClear(GL_COLOR_BUFFER_BIT); return -2;
}
/* Swap front and back buffers */
glfwSwapBuffers(window); {
const UTF8String device_name=device->GetName();
/* Poll for and process events */
glfwPollEvents(); std::cout<<"RenderDevice: "<<device_name.c_str()<<std::endl;
}
List<Display *> disp_list;
device->GetDisplayList(disp_list);
const int count=disp_list.GetCount();
std::cout<<"Device have "<<count<<" display."<<std::endl;
for(int i=0;i<count;i++)
{
std::cout<<"Display "<<i<<" ";
put(GetObject(disp_list,i));
std::cout<<std::endl;
} }
glfwTerminate();
return 0; return 0;
} }

View File

@ -33,8 +33,8 @@ namespace hgl
public: public:
virtual const VideoMode *GetCurVideoMode()=0; virtual const VideoMode *GetCurVideoMode()const=0;
virtual const ObjectList<VideoMode> &GetVideoModeList()=0; virtual const ObjectList<VideoMode> &GetVideoModeList()const=0;
}; };
struct WindowSetup struct WindowSetup
@ -108,7 +108,7 @@ namespace hgl
virtual const UTF8String GetName()=0; ///<取得设备名称 virtual const UTF8String GetName()=0; ///<取得设备名称
virtual const void GetDisplayList(List<Display *> &); ///<取得显示屏列表 virtual const void GetDisplayList(List<Display *> &)=0; ///<取得显示屏列表
virtual const Display * GetDefaultDisplay()=0; ///<取得默认显示屏 virtual const Display * GetDefaultDisplay()=0; ///<取得默认显示屏
public: public:

View File

@ -22,13 +22,13 @@ namespace hgl
public: public:
const VideoMode *GetCurVideoMode()override{return cur_video_mode;} const VideoMode *GetCurVideoMode()const override{return cur_video_mode;}
const ObjectList<VideoMode> &GetVideoModeList()override{return video_mode_list;} const ObjectList<VideoMode> &GetVideoModeList()const override{return video_mode_list;}
}; };
VideoMode *ConvertVideoMode(const GLFWvidmode *mode) VideoMode *ConvertVideoMode(const GLFWvidmode *mode)
{ {
if(mode) if(!mode)
return nullptr; return nullptr;
VideoMode *vm=new VideoMode; VideoMode *vm=new VideoMode;
@ -95,12 +95,12 @@ namespace hgl
const bool Init()override{return true;} const bool Init()override{return true;}
const void Close()override{}; const void Close()override{};
const UTF8String GetName()override ///<取得设备名称 const UTF8String GetName()override
{ {
return UTF8String("GLFW")+UTF8String(glfwGetVersionString()); return UTF8String("GLFW ")+UTF8String(glfwGetVersionString());
} }
const void GetDisplayList(List<Display *> &disp_list) ///<取得显示屏列表 const void GetDisplayList(List<Display *> &disp_list) override
{ {
int count=0; int count=0;
@ -110,7 +110,7 @@ namespace hgl
disp_list+=GetDisplayAttrib(ml[i]); disp_list+=GetDisplayAttrib(ml[i]);
} }
const Display * GetDefaultDisplay() const Display * GetDefaultDisplay() override
{ {
if(!default_display) if(!default_display)
default_display=GetDisplayAttrib(glfwGetPrimaryMonitor()); default_display=GetDisplayAttrib(glfwGetPrimaryMonitor());