我正在尝试启动一个仅打开蓝色窗口的c ++程序。 我已经尝试了xMing和vcxsrv并将输出显示为0,但是当我运行程序时,什么也没发生。
如果我运行xeyes,眼睛会显示并按照预期跟随我的光标。
我的问题是,有人知道如何使用SDL获取程序以使用WSL打开窗口吗?为什么它可以与xeyes一起使用,而自创建的代码却没有任何反应?
该代码可在常规linux计算机上工作。
编辑: 这是代码。我发现该程序直接关闭,如果最后输入cin,我会看到蓝色的窗口,但是我不确定为什么直接关闭该程序?
#include "SDL.h"
#include <iostream>
#include <glm/glm.hpp>
#include <vector>
#include "SDLauxiliary.h"
using namespace std;
using glm::vec3;
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
SDL_Surface* screen;
void Draw();
int main( int argc, char* argv[] )
{
screen = InitializeSDL( SCREEN_WIDTH, SCREEN_HEIGHT );
while( NoQuitMessageSDL() )
{
Draw();
}
SDL_SaveBMP( screen, "screenshot.bmp" );
int a = 0;
cin >> a;
return 0;
}
void Draw()
{
for( int y=0; y<SCREEN_HEIGHT; ++y )
{
for( int x=0; x<SCREEN_WIDTH; ++x )
{
vec3 color(0,0,1);
PutPixelSDL( screen, x, y, color );
}
}
if( SDL_MUSTLOCK(screen) )
SDL_UnlockSurface(screen);
SDL_UpdateRect( screen, 0, 0, 0, 0 );
}
答案 0 :(得分:0)
我想您正在做https://virtualizationreview.com/articles/2017/02/08/graphical-programs-on-windows-subsystem-on-linux.aspx方面的事情,以便使用X服务器在WSL中进行渲染并在Windows主机上查看它。
根据您的SDL版本,从理论上讲这可能是可行的,但我想您需要非常仔细地指示它 not 使用“硬件”(对于WSL意味着什么) 。您可能会更幸运地要求#SDL
的专家胜过https://webchat.freenode.net/
同时,您可以使用以下内容(假设为SDL2)至少获得一些诊断信息。
SDL_version linked;
SDL_GetVersion(&linked);
SDL_version compiled;
SDL_VERSION(&compiled);
std::cout << "Compiled with v." << SDL_VERSIONNUM(compiled.major, compiled.minor, compiled.patch)
<< ", linking with v." << SDL_VERSIONNUM(linked.major, linked.minor, linked.patch)
<< "\n";
if(SDL_Init(SDL_INIT_VIDEO) == -1)
{
cout << "SDL failed to init: " << SDL_GetError() << "\n";
exit(1);
}
我还将指出一个显而易见的事实,即SDL 确实在Windows上运行,因此,尽管这种方法是一项有趣的学术练习(这就是我的学习方法!),并且可能出于某种原因而只能在Linux下运行的程序的价值...如果您的最终目标是在屏幕上绘制一些东西,那么这样做会更容易。