ssRender插件(Plugin)使用说明:第一章 如何创建
最近关注到一款国产的渲染引擎(ssRender),其主打车载嵌入式领域,于是做了一下该软件的调查,把自己的使用过程记录一下,如果可以给大家作为参考,不胜荣幸!
首先我关注到的是这款软件的一个插件系统,官方称之为Plugin插件,其主要用于配合工具端使用,能提供数据、做自定义渲染等等等。
话不多说,我们先从创建开始搞!
首先plugin说明文档中提到需要使用visual studio2015,我们打开软件,我这里使用的是community版本。
1.创建一个c++->空项目。然后命名工程为Plugintest。
2.首先需要注意到的是,插件是一个动态链接库,所以我们在Windows平台下需要编译出来dll格式的文件,所以我们首先需要设置编译成果物的格式为dll,先右键点击工程->属性,然后 配置类型->动态库(.dll)。
3.添加cpp和.h文件,右键点击资源文件和头文件,选择 添加->新建项,依次添加cpp和.h文件。
创建完成之后,工程的主体如图所示:
4.然后我们需要设置引用头文件的位置和引用lib库的位置,这些文件在我们安装软件的目录都可以找到。
以图中为例 头文件引用位置,右键点击工程-> 属性->VC++->包含目录:
以下路径供参考:
Lib文件引用位置,右键点击工程-> 属性->VC++->库目录::
引用的lib库, 点击链接器-> 输入-> 附加依赖项:
jpeg.lib
glfw3.lib
ssrCore.lib
freetype.lib
libpng16.lib
ssrPlugin.lib
pthreadVC2.lib
还有一点说明中提到要加预编译宏:OS_Windows,右键点击工程 属性->c/c++ ->预处理器,添加OS_Windows。
5.然后呢,我们要夸一夸设计人员,已经为我们准备好了示例代码,刚好符合本人的拿来主义习惯hia!hia!。我们直接可以将说明文档中的代码拷贝粘贴即可。
"testPlugin.cpp"
#ifndef _PLUGIN_TYPE_RENDER_
//#define _PLUGIN_TYPE_RENDER_//该宏定义是为了区分数据类型的plugin和渲染类型的plugin
#endif
#include "testPlugin.h"
UserPluginDLL::UserPluginDLL()
{
#ifdef _PLUGIN_TYPE_RENDER_
loadMyShader();
#endif
}
UserPluginDLL::~UserPluginDLL()
{
}
void UserPluginDLL::init_plugin(RenderEngineBase* renderEngine, func_writelog write_log)
{
PluginBase::init_plugin(renderEngine, write_log);
}
SSRObject* UserPluginDLL::createSSRObject()
{
#ifdef _PLUGIN_TYPE_RENDER_//该宏定义是为了区分数据类型的plugin和渲染类型的plugin
SSRObject* ssrObj = new UserPluginDLL;
ssrObj->m_ssRptr_plugin = this;
#else
SSRObject* ssrObj = new SSRObject;
ssrObj->m_ssRptr_plugin = this;
#endif
ssrObj->m_ssRtype = OBJECT_TYPE_PLUGIN;
m_ssrObject = ssrObj;
return ssrObj;
}
void UserPluginDLL::release_plugin()
{
if (m_ssrObject)
{
delete m_ssrObject;
m_ssrObject = NULL;
}
}
SSR_PLUGIN_DEFINITION(UserPluginDLL)//调用此宏定义,创建预定义函数接口
#ifdef _PLUGIN_TYPE_RENDER_
//自定义Shader :
//Vertex Shader
char vShaderStr_my[] =
"attribute vec3 ssVertexPosition; \n" //【不可修改】变量名固定
"attribute vec2 ssVertexUV; \n" //【不可修改】变量名固定
"uniform mat4 ssMVP; \n" //【不可修改】变量名固定
"varying vec2 ssUV; \n" //【不可修改】变量名固定
"void main() \n"
"{ \n"
"gl_Position = ssMVP*vec4(ssVertexPosition, 1.0); \n"
"ssUV = ssVertexUV; \n"
"}\n";
//Fragment Shader
char fShaderStr_my[] =
"precision mediump float; \n"
"varying vec2 ssUV; \n"
"uniform sampler2D ssTextureSampler; \n" //【不可修改】变量名固定
"uniform vec3 myColor; \n" //【自定义】变量
"void main() \n"
"{\n"
"gl_FragColor = texture2D(ssTextureSampler, ssUV)+vec4(myColor, 0.1);\n"
"}\n";
void UserPluginDLL::loadMyShader()
{
//需要定义Program名字
setMyShaderSource("Custom_MyItem", vShaderStr_my, fShaderStr_my);
}
void UserPluginDLL::updateMyVar()
{
//修改自定义变量的值
setVec3("myColor", 1.0, 0.0, 0.0);
}
#endif
"testPlugin.h"
#pragma once
#include "PluginBase.h"
#ifdef _PLUGIN_TYPE_RENDER_ //该宏定义是为了区分数据类型的plugin和渲染类型的plugin
class UserPluginDLL : public PluginBase, public Item
#else
class UserPluginDLL : public PluginBase
#endif
{
public:
UserPluginDLL();
~UserPluginDLL();
//实例化SSR对象
SSRObject* createSSRObject();
//实例化之后执行run
void init_plugin(RenderEngineBase* renderEngine, func_writelog write_log);
//实例化之后停止stop
void release_plugin();
#ifdef _PLUGIN_TYPE_RENDER_ //该宏定义是为了区分数据类型的plugin和渲染类型的plugin
void loadMyShader();
virtual void updateMyVar();
SSR_PLUGIN_DECLARATION(UserPluginDLL, PLUGIN_RENDER, "Author:**", "2023/03/16")
#else // 插件名字 插件类型 插件作者 创建时间
SSR_PLUGIN_DECLARATION(UserPluginDLL, PLUGIN_DATA, "xiaobaidian", "2023/03/16")
#endif
SSR_PLUGIN_PROPERTY_DEF_BEGIN(UserPluginDLL)
// 属性组名称 属性名称 属性数据类型 属性值 属性值最小值 属性值最大值 tips
SSR_PLUGIN_PLUGIN_PROPERTY("GROUP_NAME", "PropertyName", TYPE_INT, "1", 0, 2, "PROPTY_TIPS")
//可以多次调用SSR_PLUGIN_PLUGIN_PROPERTY,创建不同的属性。
SSR_PLUGIN_PROPERTY_DEF_END()
SSR_PLUGIN_EVENT_DEF(UserPluginDLL)
SSR_PLUGIN_EVENT("CustomEventId")
//可以多次调用SSR_PLUGIN_EVENT()创建不同的自定义EventId
SSR_PLUGIN_EVENT_DEF_END()
};
下面我们直接编译,右键点击工程 -> 生成。
然后我们就可以在工程目录下的Debug文件夹中找到dll文件。
本章结束,如果本教程有帮助到你,请别忘记点个赞那hiahiahia,下一章更精彩!
ssRender力争做国人自己的HMI解决方案!