SDL与WSL一起

时间:2019-03-20 08:55:02

标签: c++ sdl windows-subsystem-for-linux glm-math

我正在尝试启动一个仅打开蓝色窗口的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 );
}

1 个答案:

答案 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下运行的程序的价值...如果您的最终目标是在屏幕上绘制一些东西,那么这样做会更容易。