Browse Source

Added MessageService : Basic & Naive Message logging.

Camera & vector.cpp : Fixed shifted_perspective crash with almost zero FOV.
undefined
Benjamin ‘Touky’ Huet Sam Hocevar <sam@hocevar.net> 11 years ago
parent
commit
0a7dc44a67
8 changed files with 226 additions and 2 deletions
  1. +1
    -0
      src/Makefile.am
  2. +1
    -1
      src/camera.cpp
  3. +1
    -0
      src/core.h
  4. +3
    -0
      src/lolcore.vcxproj
  5. +7
    -0
      src/lolcore.vcxproj.filters
  6. +3
    -1
      src/math/vector.cpp
  7. +143
    -0
      src/messageservice.cpp
  8. +67
    -0
      src/messageservice.h

+ 1
- 0
src/Makefile.am View File

@@ -12,6 +12,7 @@ liblolcore_a_SOURCES = \
tileset.cpp tileset.h forge.cpp forge.h video.cpp video.h \
world.cpp world.h sample.cpp sample.h sampler.cpp sampler.h \
profiler.cpp profiler.h text.cpp text.h emitter.cpp emitter.h numeric.h utils.h \
messageservice.cpp messageservice.h \
worldentity.cpp worldentity.h gradient.cpp gradient.h gradient.lolfx \
platform.cpp platform.h sprite.cpp sprite.h camera.cpp camera.h \
light.cpp light.h \


+ 1
- 1
src/camera.cpp View File

@@ -107,7 +107,7 @@ void Camera::SetProjection(float fov, float near, float far, float screen_size,
m_screen_size = screen_size;
m_screen_ratio = screen_ratio;
mat4 screen_scale = mat4::scale(vec3(m_screen_scale.xy, 1.f));
if (m_fov > .0f)
if (m_fov > .001f)
{
if (m_is_shifted)
SetProjection(screen_scale * mat4::shifted_perspective(m_fov, screen_size, screen_ratio, m_near, m_far));


+ 1
- 0
src/core.h View File

@@ -126,6 +126,7 @@ static inline int isnan(float f)
#include "audio.h"
#include "scene.h"
#include "profiler.h"
#include "messageservice.h"

// Input
#include "input/input.h"


+ 3
- 0
src/lolcore.vcxproj View File

@@ -155,6 +155,7 @@
<ClCompile Include="math\trig.cpp" />
<ClCompile Include="math\vector.cpp" />
<ClCompile Include="mesh\mesh.cpp" />
<ClCompile Include="messageservice.cpp" />
<ClCompile Include="platform.cpp" />
<ClCompile Include="platform\d3d9\d3d9input.cpp" />
<ClCompile Include="platform\ps3\ps3app.cpp" />
@@ -253,6 +254,7 @@
<ClInclude Include="lol\unit.h" />
<ClInclude Include="mesh\mesh.h" />
<ClInclude Include="map.h" />
<ClInclude Include="messageservice.h" />
<ClInclude Include="numeric.h" />
<ClInclude Include="platform.h" />
<ClInclude Include="platform\d3d9\d3d9input.h" />
@@ -298,6 +300,7 @@
<None Include="easymesh\easymesh-scanner.l" />
<None Include="gpu\lolfx-parser.y" />
<None Include="gpu\lolfx-scanner.l" />
<None Include="Makefile.am" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="bullet\lolbullet.vcxproj">


+ 7
- 0
src/lolcore.vcxproj.filters View File

@@ -309,6 +309,9 @@
<ClCompile Include="input\controller.cpp">
<Filter>input</Filter>
</ClCompile>
<ClCompile Include="MessageService.cpp">
<Filter>...</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="debug\fps.h">
@@ -611,6 +614,9 @@
<ClInclude Include="utils.h">
<Filter>...</Filter>
</ClInclude>
<ClInclude Include="messageservice.h">
<Filter>...</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<LolFxCompile Include="gpu\emptymaterial.lolfx">
@@ -663,5 +669,6 @@
<None Include="gpu\lolfx-parser.y">
<Filter>gpu</Filter>
</None>
<None Include="Makefile.am" />
</ItemGroup>
</Project>

+ 3
- 1
src/math/vector.cpp View File

@@ -785,7 +785,9 @@ template<> mat4 mat4::shifted_perspective(float fov_y, float screen_size,
float screen_ratio_yx, float near, float far)
{
float new_fov_y = fov_y * (F_PI / 180.0f);
float dist_scr = (screen_size * screen_ratio_yx * .5f) / tanf(new_fov_y * .5f);
float tan_y = tanf(new_fov_y * .5f);
ASSERT(tan_y > 0.000001f);
float dist_scr = (screen_size * screen_ratio_yx * .5f) / tan_y;

return mat4::perspective(fov_y, screen_size, screen_size * screen_ratio_yx,
max(.001f, dist_scr + near),


+ 143
- 0
src/messageservice.cpp View File

@@ -0,0 +1,143 @@
//
// Lol Engine
//
// Copyright: (c) 2013 Benjamin "Touky" Huet <huet.benjamin@gmail.com>
// 2013 Sam Hocevar <sam@hocevar.net>
// This program is free software; you can redistribute it and/or
// modify it under the terms of the Do What The Fuck You Want To
// Public License, Version 2, as published by Sam Hocevar. See
// http://www.wtfpl.net/ for more details.
//

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

#include <cstring>
#include <cstdlib>
#include <time.h>

#include "core.h"

namespace lol
{

/*
* The global g_renderer object, initialised by Video::Init
*/
MessageService *g_messageservice = nullptr;

//-----------------------------------------------------------------------------
// Ctor/Dtor
//----
MessageService::MessageService()
{
}

MessageService::~MessageService()
{
m_bucket.Empty();
}

//Setup/Destroy
void MessageService::Setup(int bucket_size)
{
g_messageservice = new MessageService();
g_messageservice->m_bucket.Resize(bucket_size);
}

void MessageService::Destroy()
{
delete g_messageservice;
g_messageservice = nullptr;
}

//-----------------------------------------------------------------------------
bool MessageService::Send(int id, const String& message)
{
if (g_messageservice)
{
ASSERT(0 <= id && id < g_messageservice->m_bucket.Count());
return g_messageservice->Send(id, message.C());
}
return false;
}

bool MessageService::Send(int id, const char* message)
{
if (g_messageservice)
{
ASSERT(0 <= id && id < g_messageservice->m_bucket.Count());
MessageService& g = *g_messageservice;
Array<MessageList>& bucket = g.m_bucket[id];
bucket << MessageList(time(nullptr), String(message));
return true;
}
return false;
}

//----
bool MessageService::FetchFirst(int id, String& message)
{
if (g_messageservice)
{
ASSERT(0 <= id && id < g_messageservice->m_bucket.Count());
time_t timestamp;
return g_messageservice->FetchFirst(id, message, timestamp);
}
return false;
}

bool MessageService::FetchFirst(int id, String& message, time_t& timestamp)
{
if (g_messageservice)
{
ASSERT(0 <= id && id < g_messageservice->m_bucket.Count());
MessageService& g = *g_messageservice;
Array<MessageList>& bucket = g.m_bucket[id];

if (bucket.Count())
{
message = bucket[0].m_message;
timestamp = bucket[0].m_timestamp;
bucket.Remove(0);
return true;
}
}
return false;
}

//----
bool MessageService::FetchAll(int id, String& message)
{
if (g_messageservice)
{
ASSERT(0 <= id && id < g_messageservice->m_bucket.Count());
time_t timestamp;
return g_messageservice->FetchAll(id, message, timestamp);
}
return false;
}

bool MessageService::FetchAll(int id, String& message, time_t& first_timestamp)
{
if (g_messageservice)
{
ASSERT(0 <= id && id < g_messageservice->m_bucket.Count());
MessageService& g = *g_messageservice;
Array<MessageList>& bucket = g.m_bucket[id];
message = String("");

if (bucket.Count())
{
first_timestamp = bucket[0].m_timestamp;
for (int i = 0; i < bucket.Count(); ++i)
message += bucket[i].m_message;
bucket.Empty();
return true;
}
}
return false;
}

} /* namespace lol */

+ 67
- 0
src/messageservice.h View File

@@ -0,0 +1,67 @@
//
// Lol Engine
//
// Copyright: (c) 2013 Benjamin "Touky" Huet <huet.benjamin@gmail.com>
// (c) 2013 Sam Hocevar <sam@hocevar.net>
// This program is free software; you can redistribute it and/or
// modify it under the terms of the Do What The Fuck You Want To
// Public License, Version 2, as published by Sam Hocevar. See
// http://www.wtfpl.net/ for more details.
//

//
// The Message Service class
// ----------------
//

#if !defined __MESSAGESERVICE_H__
#define __MESSAGESERVICE_H__

namespace lol
{

struct MessageList
{
MessageList(time_t timestamp, String& message)
{
m_timestamp = timestamp;
m_message = message;
}

time_t m_timestamp;
String m_message;
};

/*
A template class perhaps ?
*/
class MessageService
{
public:
//CTor/DTor
MessageService();
~MessageService();

static char const *GetName() { return "<messageservice>"; }

//Setup/Destroy
static void Setup(int bucket_size);
static void Destroy();

//Common interactions
static bool Send(int id, const String& message);
static bool Send(int id, const char* message);
static bool FetchFirst(int id, String& message);
static bool FetchFirst(int id, String& message, time_t &timestamp);
static bool FetchAll(int id, String& message);
static bool FetchAll(int id, String& message, time_t &first_timestamp);

private:
Array<Array<MessageList> > m_bucket;
};

extern MessageService *g_messageservice;

} /* namespace lol */

#endif /* __MESSAGESERVICE_H__ */

Loading…
Cancel
Save