前几天阿里云给了个短信,说是SUSE Linux Enterprise Server (SLES) 操作系统将于2021年10月30日正式开启收费。我就登陆阿里云看了一下,发现我用的是openSUSE 13.1。难道是所有的suse/openSUSE都收费?算了,顺道把服务器升级成了最新的openSUSE 15.3、MariaDB 10.5.10、PHP7、WordPress 5.8.1。
openSUSE 15.3+FFMPEG 4.4+CUDA 11 SDK编译配置
5 8 月, 2021 by admin 无评论 »已被设定为最低RTX 2000系列显卡,如需降级,请修改nvccflags参数。比如RTX1000系列,就可改为compute_61,sm_61
./configure –prefix=/usr –libdir=/usr/lib64 –shlibdir=/usr/lib64 –incdir=/usr/include/ffmpeg –extra-cflags=’-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g’ –optflags=’-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -g’ –extra-cflags=-I/usr/local/cuda/include –extra-ldflags=-L/usr/local/cuda/lib64 –nvccflags=’-gencode arch=compute_75,code=sm_75 -O2′ –disable-htmlpages –enable-pic –disable-stripping –enable-shared –disable-static –enable-gpl –enable-version3 –enable-nonfree –disable-openssl –enable-swresample –enable-gnutls –enable-ladspa –enable-cuda-nvcc –enable-cuvid –enable-libass –enable-libaom –enable-libcodec2 –enable-libbluray –enable-libbs2b –enable-libcelt –enable-libcdio –enable-libdav1d –enable-libdc1394 –enable-libdrm –enable-libfontconfig –enable-libfreetype –enable-libfribidi –enable-libgsm –enable-libjack –enable-libmp3lame –enable-libopenjpeg –enable-libopenmpt –enable-libopus –enable-libpulse –enable-libspeex –enable-libssh –enable-libtheora –enable-libtwolame –enable-libvidstab –enable-libvmaf –enable-libvorbis –disable-libv4l2 –enable-libvpx –enable-libwebp –enable-libx264 –enable-libx265 –enable-libxml2 –enable-libzimg –disable-libzvbi –enable-libmfx –enable-vaapi –enable-vdpau –enable-version3 –enable-muxers –enable-demuxers –enable-libnpp –enable-vulkan –enable-encoder=’mpeg4,h263,h264,hevc,vc1,aac,apng,ass,ayuv,bmp,ffv1,ffvhuff,flac,gif,huffyuv,jpegls,libaom,libaom_av1,libcodec2,libgsm,libmp3lame,libopenjpeg,libopus,librav1e,libschroedinger,libspeex,libsvtav1,libtheora,libtwolame,libvorbis,libvpx_vp8,libvpx_vp9,libwebp,libwebp_anim,mjpeg,mp2,mp2fixed,mpeg1video,mpeg2video,opus,pam,pbm,pcm_alaw,pcm_f32be,pcm_f32le,pcm_f64be,pcm_f64le,pcm_mulaw,pcm_s16be,pcm_s16be_planar,pcm_s16le,pcm_s16le_planar,pcm_s24be,pcm_s24le,pcm_s24le_planar,pcm_s32be,pcm_s32le,pcm_s32le_planar,pcm_s8,pcm_s8_planar,pcm_u16be,pcm_u16le,pcm_u24be,pcm_u24le,pcm_u32be,pcm_u32le,pcm_u8,pcx,pgm,pgmyuv,png,ppm,rawvideo,sgi,srt,ssa,sunrast,targa,text,tiff,v210,v308,v408,v410,vorbis,webvtt,wrapped_avframe,xbm,xwd,y41p,yuv4,zlib,’ –enable-decoder=’mpeg4,h263,h264,hevc,vc1,aac,ac3,ansi,apng,ass,ayuv,bmp,dirac,exr,ffv1,ffvhuff,ffwavesynth,flac,gif,gsm,huffyuv,ilbc,libaom,libaom_av1,libcelt,libcodec2,libdav1d,libgsm,libopenjpeg,libopus,libschroedinger,libspeex,libvorbis,libvpx_vp8,libvpx_vp9,mjpeg,mp1,mp1float,mp2,mp2float,mp3,mp3float,mpeg1video,mpeg2video,,opus,pam,pbm,pcm_alaw,pcm_bluray,pcm_dvd,pcm_f32be,pcm_f32le,pcm_f64be,pcm_f64le,pcm_mulaw,pcm_s16be,pcm_s16be_planar,pcm_s16le,pcm_s16le_planar,pcm_s24be,pcm_s24le,pcm_s24le_planar,pcm_s32be,pcm_s32le,pcm_s32le_planar,pcm_s8,pcm_s8_planar,pcm_u16be,pcm_u16le,pcm_u24be,pcm_u24le,pcm_u32be,pcm_u32le,pcm_u8,pcx,pgm,pgmyuv,pgssub,png,ppm,rawvideo,sgi,srt,ssa,sunrast,targa,text,theora,tiff,v210,v210x,v308,v408,v410,vorbis,vp3,vp5,vp6,vp6a,vp6f,vp8,vp9,webp,webvtt,wrapped_avframe,xbm,xwd,y41p,yuv4,zlib,’
依赖库(部分)
libass-devel libbluray-devel libbs2b-devel libcelt-devel codec2-devel dav1d-devel libdc1394-devel libavc1394-devel libdrm-devel libgsm-devel libmfx-devel libmp3lame-devel openjpeg2-devel libopenmpt-devel libopus-devel libopusenc-devel opusfile-devel libpulse-devel libssh-devel speex-devel speexdsp-devel libtheora-devel libtwolame-devel libvidstab-devel vmaf-devel libvpx-devel libwebp-devel libx264-devel libx265-devel zimg-devel libxml2-devel libjack-devel libcdio-devel libcdio-paranoia-devel vulkan-devel ffnvcodec-devel libva-devel libvdpau-devel
如需编译ffplay,需添加libSDL-devel libSDL2-devel
PipelineCache.com Server计划
4 11 月, 2020 by admin 无评论 »PipelineCache真的是一个可以提速的好东西。
刚刚买了下PipelineCache.com/VKPipelineCache.com两个域名,计划在其上架设一个小型DB,提供vulkan的pipelinecache存取服务。
具体事宜请关注本站通知。
新工具 MaterialEditor
14 10 月, 2020 by admin 无评论 »之前写了基于XML的Shader/Material系统,也有了命令行的Material编译器。
但在使用中发现,编辑、查错、编译、复制、预览。。。整个流程下来还是挺繁琐的,于是动手制作了如下小工具。
使用QT 5.15.1做为GUI API,跨平台。
独立的GLSL编译工具
5 9 月, 2020 by admin 无评论 »由于使用SPIRV-Cross以及glslang的源代码版本有太多的编译配置选项,很烦,所以我制作了一个动态链接库版的GLSL到SPV编译器。
使用代码大致如下:
namespace glsl_compiler
{
enum class DescriptorType //等同VkDescriptorType
{
SAMPLER = 0,
COMBINED_IMAGE_SAMPLER = 1,
SAMPLED_IMAGE = 2,
STORAGE_IMAGE = 3,
UNIFORM_TEXEL_BUFFER = 4,
STORAGE_TEXEL_BUFFER = 5,
UNIFORM_BUFFER = 6,
STORAGE_BUFFER = 7,
UNIFORM_BUFFER_DYNAMIC = 8,
STORAGE_BUFFER_DYNAMIC = 9,
INPUT_ATTACHMENT = 10,
BEGIN_RANGE=SAMPLER,
END_RANGE=INPUT_ATTACHMENT,
RANGE_SIZE=(END_RANGE-BEGIN_RANGE)+1
};
enum class VertexAttribBaseType
{
Bool=0,
Int,
UInt,
Float,
Double,
};//enum class VertexAttribBaseType
struct ShaderStage
{
char name[128];
uint8_t location;
uint32_t basetype; //对应enum class VertexAttribBaseType
uint32_t vec_size;
};//
struct ShaderStageData
{
uint32_t count;
ShaderStage *items;
};
struct ShaderResource
{
char name[128];
uint8_t set;
uint8_t binding;
};
struct ShaderResourceData
{
uint32_t count;
ShaderResource *items;
};
struct SPVData
{
bool result;
char *log;
char *debug_log;
uint32_t *spv_data;
uint32_t spv_length;
ShaderStageData input,output;
ShaderResourceData resource[size_t(DescriptorType::RANGE_SIZE)];
};
struct GLSLCompilerInterface
{
bool (*Init)(); ///<初始化
void (*Close)(); ///<关闭
uint32_t (*GetType)(const char *ext_name); ///<根据扩展名获取SHADER类型
SPVData * (*Compile)(const uint32_t type,const char *source); ///<编译glsl
void (*Free)(SPVData *); ///<释放数据
};
}//namespace glsl_shader
使用方法:
- 加载动态链接库
- 从动态链接库获取GetInterface函数
- 用GetInterface函数得到一个GLSLCompilerInterface指针(以下简称GSI)
- 调用GSI::Init函数
- 自行加载glsl的文本,并保证为ansi或utf8字符集
- 截取glsl文件扩展名(不包括.),或自行传递一个字符串给GSI::GetType函数,以获取shader类型。
shader文件扩展名规则同glslangValidator- vert 顶点
- tesc 镶嵌控制
- tese 镶嵌评估
- geom 几何
- frag 片断
- comp 计算
- task 任务
- mesh 网格
- 调用GSI::Compile函数,并同时传递shader类型以及shader文本字符串
- 根据得到的SPVData::result来判断是否成功
- result为false表示失败,在log/debug_log中包含返回的错误信息
- result为true表示成功,在spv_data,spv_length中包含编译好的spv数据
- 自行处理spv数据
- 调用GSI::Free释放SPVData指针
现所有主要开源仓库一览
5 4 月, 2020 by admin 无评论 »- 现今主力开发的超轻量级渲染引擎
- https://github.com/hyzboy/ULRE
- 曾经的旧主力引擎
- https://github.com/hyzboy/CMGameEngine
- 曾经短暂编写PHP网站时总结的小型PHP工具库
- https://github.com/hyzboy/CMPHP
- 修改的仅支持OpenGL Core的GLEW
- https://github.com/hyzboy/GLEWCore
2D/3D抛物线
23 5 月, 2019 by admin 无评论 »#include<iostream>
using namespace std;
using uint=unsigned int;
struct vec2
{
float x,y;
};
struct vec3
{
float x,y,z;
};
/**
* 算出指定数量的抛物线高度值
* @param count 结果数量
* @param start 起始时间量,一般为-1
* @param end 结束时间量,一般为+1
*/
float *Parabolic(const uint count,const float time_start=-1,const float time_end=1)
{
if(count<=0)return(nullptr);
float *result=new float[count];
float rate;
float cur=time_start;
float total_time=time_end-time_start;
for(uint i=0;i<count;i++)
{
rate=float(i)/float(count);
cur=time_start+rate*total_time;
result[i]=1-cur*cur;
cout<<“height[“<<i<<“] “<<result[i]<<endl;
}
return result;
}
/**
* 画2D抛物线
* @param start 起始点
* @param end 结束点
* @param up 单位向上量
* @param height 高度值
* @param count 数量
*/
void Put2D(const vec2 &start,const vec2 &end,const vec2 &up,const float *height,const uint count)
{
vec2 total;
vec2 pos;
float rate;
total.x=end.x-start.x;
total.y=end.y-start.y;
cout<<“from “<<start.x<<“,”<<start.y<<” to “<<end.x<<“,”<<end.y<<endl;
for(uint i=0;i<count;i++)
{
rate=float(i)/float(count);
pos.x=start.x+rate*total.x;
pos.y=start.y+rate*total.y;
pos.x+=height[i]*up.x;
pos.y+=height[i]*up.y;
cout<<i<<“: “<<pos.x<<“,”<<pos.y<<endl;
}
}
/**
* 画3D抛物线
* @param start 起始点
* @param end 结束点
* @param up 单位向上量
* @param height 高度值
* @param count 数量
*/
void Put3D(const vec3 &start,const vec3 &end,const vec3 &up,const float *height,const uint count)
{
vec3 total;
vec3 pos;
float rate;
total.x=end.x-start.x;
total.y=end.y-start.y;
total.z=end.z-start.z;
cout<<“from “<<start.x<<“,”<<start.y<<“,”<<start.z<<” to “<<end.x<<“,”<<end.y<<“,”<<end.z<<endl;
for(uint i=0;i<count;i++)
{
rate=float(i)/float(count);
pos.x=start.x+rate*total.x;
pos.y=start.y+rate*total.y;
pos.z=start.z+rate*total.z;
pos.x+=height[i]*up.x;
pos.y+=height[i]*up.y;
pos.z+=height[i]*up.z;
cout<<i<<“: “<<pos.x<<“,”<<pos.y<<“,”<<pos.z<<endl;
}
}
void Test2D(float *height,const uint count)
{
vec2 start,end,up;
start.x=0;
start.y=0;
end.x=100;
end.y=0;
up.x=0;
up.y=100;
Put2D(start,end,up,height,count);
}
void Test3D(float *height,const uint count)
{
vec3 start,end,up;
start.x=0;
start.y=0;
start.z=0;
end.x=100;
end.y=0;
end.z=100;
up.x=0;
up.y=100;
up.z=0;
Put3D(start,end,up,height,count);
}
void main()
{
constexpr uint count=10;
float *height=Parabolic(count);
Test2D(height,count);
Test3D(height,count);
delete[] height;
}