瀏覽代碼

Implement video recording using libpipi.

legacy
Sam Hocevar sam 14 年之前
父節點
當前提交
0fe723ee86
共有 5 個文件被更改,包括 128 次插入5 次删除
  1. +3
    -2
      src/Makefile.am
  2. +86
    -0
      src/debugrecord.cpp
  3. +34
    -0
      src/debugrecord.h
  4. +2
    -2
      src/scene.cpp
  5. +3
    -1
      src/test-map.cpp

+ 3
- 2
src/Makefile.am 查看文件

@@ -9,13 +9,14 @@ libcommon_a_SOURCES = \
joystick.cpp joystick.h asset.cpp asset.h ticker.cpp ticker.h \
forge.cpp forge.h video.cpp video.h timer.cpp timer.h \
profiler.cpp profiler.h \
debugfps.cpp debugfps.h debugsprite.cpp debugsprite.h
debugfps.cpp debugfps.h debugsprite.cpp debugsprite.h \
debugrecord.cpp debugrecord.h
libcommon_a_CXXFLAGS = `pkg-config --cflags sdl gl SDL_image`

test_map_SOURCES = test-map.cpp sdlinput.cpp sdlinput.h
test_map_CXXFLAGS = `pkg-config --cflags sdl gl SDL_image`
test_map_LDADD = libcommon.a
test_map_LDFLAGS = `pkg-config --libs sdl gl SDL_image`
test_map_LDFLAGS = `pkg-config --libs sdl gl SDL_image` -lpipi

editor_SOURCES = gtk/editor.cpp
editor_CXXFLAGS = `pkg-config --cflags sdl gl SDL_image gtk+-2.0 gtkgl-2.0`


+ 86
- 0
src/debugrecord.cpp 查看文件

@@ -0,0 +1,86 @@
//
// Deus Hax (working title)
// Copyright (c) 2010 Sam Hocevar <sam@hocevar.net>
//

#if defined HAVE_CONFIG_H
# include "config.h"
#endif

#include <cstdio>
#include <cstring>

#include <pipi.h>

#include "debugrecord.h"
#include "video.h"

/*
* DebugRecord implementation class
*/

class DebugRecordData
{
friend class DebugRecord;

private:
char const *path;
int width, height;
pipi_sequence_t *sequence;
};

/*
* Public DebugRecord class
*/

DebugRecord::DebugRecord(char const *path)
{
data = new DebugRecordData();
data->path = strdup(path);
data->width = 0;
data->height = 0;
data->sequence = NULL;
}

Asset::Group DebugRecord::GetGroup()
{
return GROUP_RENDER_CAPTURE;
}

void DebugRecord::TickGame(float delta_time)
{
Asset::TickGame(delta_time);
}

void DebugRecord::TickRender(float delta_time)
{
Asset::TickRender(delta_time);

int width = Video::GetWidth();
int height = Video::GetHeight();

if (data->width != width || data->height != height)
{
data->width = width;
data->height = height;

if (data->sequence)
pipi_close_sequence(data->sequence);

data->sequence = pipi_open_sequence(data->path, width, height, 30);
}

if (data->sequence)
{
uint32_t *buffer = new uint32_t[width * height];
Video::Capture(buffer);
pipi_feed_sequence(data->sequence, (uint8_t *)buffer, width, height);
delete[] buffer;
}
}

DebugRecord::~DebugRecord()
{
delete data;
}


+ 34
- 0
src/debugrecord.h 查看文件

@@ -0,0 +1,34 @@
//
// Deus Hax (working title)
// Copyright (c) 2010 Sam Hocevar <sam@hocevar.net>
//

//
// The DebugRecord class
// ---------------------
//

#if !defined __DH_DEBUGRECORD_H__
#define __DH_DEBUGRECORD_H__

#include "asset.h"

class DebugRecordData;

class DebugRecord : public Asset
{
public:
DebugRecord(char const *path);
virtual ~DebugRecord();

protected:
virtual Group GetGroup();
virtual void TickGame(float delta_time);
virtual void TickRender(float delta_time);

private:
DebugRecordData *data;
};

#endif // __DH_DEBUGRECORD_H__


+ 2
- 2
src/scene.cpp 查看文件

@@ -90,8 +90,8 @@ void Scene::Render() // XXX: rename to Blit()
static float f = 0.0f;
f += 0.05f;
glTranslatef(320.0f, 240.0f, 0.0f);
glRotatef(45.0f, 1.0f, 0.0f, 0.0f);
glRotatef(30.0f * sinf(f), 0.0f, 0.0f, 1.0f);
glRotatef(50.0f + 3.0f * sinf(f), 1.0f, 0.0f, 0.0f);
glRotatef(20.0f * cosf(f), 0.0f, 0.0f, 1.0f);
//glRotatef(30.0f, 0.0f, 0.0f, 1.0f);
glTranslatef(-320.0f, -240.0f, 0.0f);



+ 3
- 1
src/test-map.cpp 查看文件

@@ -15,6 +15,7 @@
#include "sdlinput.h"
#include "debugfps.h"
#include "debugsprite.h"
#include "debugrecord.h"
#include "game.h"
#include "ticker.h"
#include "profiler.h"
@@ -39,7 +40,7 @@ int main(int argc, char **argv)
return EXIT_FAILURE;
}

SDL_WM_SetCaption("Deus Hax (SDL)", NULL);
SDL_WM_SetCaption("Map Test (SDL)", NULL);
SDL_ShowCursor(0);
SDL_WM_GrabInput(SDL_GRAB_ON);

@@ -53,6 +54,7 @@ int main(int argc, char **argv)
new SdlInput(game);
new DebugFps();
new DebugSprite(game);
//new DebugRecord("movie.ogg");

while (!game->Finished())
{


Loading…
取消
儲存