本文整理汇总了C++中IDirect3DSurface9_Release函数的典型用法代码示例。如果您正苦于以下问题:C++ IDirect3DSurface9_Release函数的具体用法?C++ IDirect3DSurface9_Release怎么用?C++ IDirect3DSurface9_Release使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IDirect3DSurface9_Release函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: D3D_DestroyRenderer
static void
D3D_DestroyRenderer(SDL_Renderer * renderer)
{
D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata;
if (data) {
/* Release the render target */
if (data->defaultRenderTarget) {
IDirect3DSurface9_Release(data->defaultRenderTarget);
data->defaultRenderTarget = NULL;
}
if (data->currentRenderTarget != NULL) {
IDirect3DSurface9_Release(data->currentRenderTarget);
data->currentRenderTarget = NULL;
}
if (data->device) {
IDirect3DDevice9_Release(data->device);
}
if (data->d3d) {
IDirect3D9_Release(data->d3d);
ID3DXMatrixStack_Release(data->matrixStack);
SDL_UnloadObject(data->d3dDLL);
}
SDL_free(data);
}
SDL_free(renderer);
}
开发者ID:zester,项目名称:Mezzanine,代码行数:28,代码来源:SDL_render_d3d.c
示例2: ADM_info
/**
\fn cleanup
\brief cleanup all display dependant stuff, called again before switching zoom and at exit
*/
bool dxvaRender::cleanup()
{
ADM_info("D3D cleanup\n");
if(scaler)
{
delete scaler;
scaler=NULL;
}
if(mySurface)
{
IDirect3DSurface9_Release(mySurface);
mySurface=NULL;
}
if(myYV12Surface)
{
IDirect3DSurface9_Release(myYV12Surface);
myYV12Surface=NULL;
}
#ifndef REUSE_DEVICE
if(d3dDevice)
{
IDirect3DDevice9_Release(d3dDevice);
d3dDevice=NULL;
}
#endif
if(videoBuffer)
{
delete [] videoBuffer;
videoBuffer=NULL;
}
return true;
}
开发者ID:TotalCaesar659,项目名称:avidemux2,代码行数:37,代码来源:GUI_dxva2Render.cpp
示例3: destroy_d3d_surfaces
/** @brief Destroy D3D Offscreen and Backbuffer surfaces.
*/
static void destroy_d3d_surfaces(void)
{
mp_msg(MSGT_VO, MSGL_V, "<vo_direct3d>destroy_d3d_surfaces called.\n");
/* Let's destroy the old (if any) D3D Surfaces */
if (priv->locked_rect.pBits)
IDirect3DSurface9_UnlockRect(priv->d3d_surface);
priv->locked_rect.pBits = NULL;
if (priv->d3d_surface)
IDirect3DSurface9_Release(priv->d3d_surface);
priv->d3d_surface = NULL;
/* kill the OSD texture and its shadow copy */
if (priv->d3d_texture_osd)
IDirect3DTexture9_Release(priv->d3d_texture_osd);
priv->d3d_texture_osd = NULL;
if (priv->d3d_texture_system)
IDirect3DTexture9_Release(priv->d3d_texture_system);
priv->d3d_texture_system = NULL;
if (priv->d3d_backbuf)
IDirect3DSurface9_Release(priv->d3d_backbuf);
priv->d3d_backbuf = NULL;
}
开发者ID:HermiG,项目名称:mplayer2,代码行数:28,代码来源:vo_direct3d.c
示例4: device_state_release
static void device_state_release(struct device_state *state)
{
unsigned int i;
for (i = 0; i < state->num_render_targets; i++)
{
if (state->render_targets[i])
IDirect3DSurface9_Release(state->render_targets[i]);
}
HeapFree(GetProcessHeap(), 0, state->render_targets);
if (state->depth_stencil) IDirect3DSurface9_Release(state->depth_stencil);
}
开发者ID:hoangduit,项目名称:reactos,代码行数:14,代码来源:render.c
示例5: D3D_RenderReadPixels
static int
D3D_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
Uint32 format, void * pixels, int pitch)
{
D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata;
D3DSURFACE_DESC desc;
LPDIRECT3DSURFACE9 backBuffer;
LPDIRECT3DSURFACE9 surface;
RECT d3drect;
D3DLOCKED_RECT locked;
HRESULT result;
result = IDirect3DDevice9_GetBackBuffer(data->device, 0, 0, D3DBACKBUFFER_TYPE_MONO, &backBuffer);
if (FAILED(result)) {
return D3D_SetError("GetBackBuffer()", result);
}
result = IDirect3DSurface9_GetDesc(backBuffer, &desc);
if (FAILED(result)) {
IDirect3DSurface9_Release(backBuffer);
return D3D_SetError("GetDesc()", result);
}
result = IDirect3DDevice9_CreateOffscreenPlainSurface(data->device, desc.Width, desc.Height, desc.Format, D3DPOOL_SYSTEMMEM, &surface, NULL);
if (FAILED(result)) {
IDirect3DSurface9_Release(backBuffer);
return D3D_SetError("CreateOffscreenPlainSurface()", result);
}
result = IDirect3DDevice9_GetRenderTargetData(data->device, backBuffer, surface);
if (FAILED(result)) {
IDirect3DSurface9_Release(surface);
IDirect3DSurface9_Release(backBuffer);
return D3D_SetError("GetRenderTargetData()", result);
}
d3drect.left = rect->x;
d3drect.right = rect->x + rect->w;
d3drect.top = rect->y;
d3drect.bottom = rect->y + rect->h;
result = IDirect3DSurface9_LockRect(surface, &locked, &d3drect, D3DLOCK_READONLY);
if (FAILED(result)) {
IDirect3DSurface9_Release(surface);
IDirect3DSurface9_Release(backBuffer);
return D3D_SetError("LockRect()", result);
}
SDL_ConvertPixels(rect->w, rect->h,
D3DFMTToPixelFormat(desc.Format), locked.pBits, locked.Pitch,
format, pixels, pitch);
IDirect3DSurface9_UnlockRect(surface);
IDirect3DSurface9_Release(surface);
IDirect3DSurface9_Release(backBuffer);
return 0;
}
开发者ID:zester,项目名称:Mezzanine,代码行数:59,代码来源:SDL_render_d3d.c
示例6: D3D_SetRenderTarget
static int
D3D_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
{
D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata;
D3D_TextureData *texturedata;
HRESULT result;
D3D_ActivateRenderer(renderer);
/* Release the previous render target if it wasn't the default one */
if (data->currentRenderTarget != NULL) {
IDirect3DSurface9_Release(data->currentRenderTarget);
data->currentRenderTarget = NULL;
}
if (texture == NULL) {
IDirect3DDevice9_SetRenderTarget(data->device, 0, data->defaultRenderTarget);
return 0;
}
texturedata = (D3D_TextureData *) texture->driverdata;
result = IDirect3DTexture9_GetSurfaceLevel(texturedata->texture, 0, &data->currentRenderTarget);
if(FAILED(result)) {
D3D_SetError("GetSurfaceLevel()", result);
return -1;
}
result = IDirect3DDevice9_SetRenderTarget(data->device, 0, data->currentRenderTarget);
if(FAILED(result)) {
D3D_SetError("SetRenderTarget()", result);
return -1;
}
return 0;
}
开发者ID:BabyFlower,项目名称:SurveillanceClientOnMobile,代码行数:34,代码来源:SDL_render_d3d.c
示例7: D3D_Reset
static int
D3D_Reset(SDL_Renderer * renderer)
{
D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata;
HRESULT result;
/* Release the default render target before reset */
if (data->defaultRenderTarget) {
IDirect3DSurface9_Release(data->defaultRenderTarget);
data->defaultRenderTarget = NULL;
}
result = IDirect3DDevice9_Reset(data->device, &data->pparams);
if (FAILED(result)) {
if (result == D3DERR_DEVICELOST) {
/* Don't worry about it, we'll reset later... */
return 0;
} else {
return D3D_SetError("Reset()", result);
}
}
IDirect3DDevice9_SetVertexShader(data->device, NULL);
IDirect3DDevice9_SetFVF(data->device,
D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
IDirect3DDevice9_SetRenderState(data->device, D3DRS_CULLMODE,
D3DCULL_NONE);
IDirect3DDevice9_SetRenderState(data->device, D3DRS_LIGHTING, FALSE);
IDirect3DDevice9_GetRenderTarget(data->device, 0, &data->defaultRenderTarget);
return 0;
}
开发者ID:zester,项目名称:Mezzanine,代码行数:30,代码来源:SDL_render_d3d.c
示例8: dxva2_frames_uninit
static void dxva2_frames_uninit(AVHWFramesContext *ctx)
{
AVDXVA2DeviceContext *device_hwctx = ctx->device_ctx->hwctx;
AVDXVA2FramesContext *frames_hwctx = ctx->hwctx;
DXVA2FramesContext *s = ctx->internal->priv;
int i;
if (frames_hwctx->decoder_to_release)
IDirectXVideoDecoder_Release(frames_hwctx->decoder_to_release);
if (s->surfaces_internal) {
for (i = 0; i < frames_hwctx->nb_surfaces; i++) {
if (s->surfaces_internal[i])
IDirect3DSurface9_Release(s->surfaces_internal[i]);
}
}
av_freep(&s->surfaces_internal);
if (s->service) {
IDirectXVideoAccelerationService_Release(s->service);
s->service = NULL;
}
if (s->device_handle != INVALID_HANDLE_VALUE) {
IDirect3DDeviceManager9_CloseDeviceHandle(device_hwctx->devmgr, s->device_handle);
s->device_handle = INVALID_HANDLE_VALUE;
}
}
开发者ID:mstorsjo,项目名称:libav,代码行数:28,代码来源:hwcontext_dxva2.c
示例9: D3D9CB_DestroyDepthStencilSurface
ULONG WINAPI D3D9CB_DestroyDepthStencilSurface(IWineD3DSurface *pSurface) {
IDirect3DSurface9Impl* surfaceParent;
TRACE("(%p) call back\n", pSurface);
IWineD3DSurface_GetParent(pSurface, (IUnknown **) &surfaceParent);
surfaceParent->isImplicit = FALSE;
/* Surface had refcount of 0 GetParent addrefed to 1, so 1 Release is enough */
return IDirect3DSurface9_Release((IDirect3DSurface9*) surfaceParent);
}
开发者ID:devyn,项目名称:wine,代码行数:9,代码来源:directx.c
示例10: DxDestroyVideoDecoder
static void DxDestroyVideoDecoder(vlc_va_dxva2_t *va)
{
if (va->decoder)
IDirectXVideoDecoder_Release(va->decoder);
va->decoder = NULL;
for (unsigned i = 0; i < va->surface_count; i++)
IDirect3DSurface9_Release(va->surface[i].d3d);
va->surface_count = 0;
}
开发者ID:Rodeo314,项目名称:tim-vlc-2.1,代码行数:10,代码来源:dxva2.c
示例11: IDirect3DDevice9_EndScene_Hook
HRESULT STDMETHODCALLTYPE IDirect3DDevice9_EndScene_Hook(IDirect3DDevice9* This) {
static unsigned count = 0;
auto ticks = []() {
LARGE_INTEGER value;
QueryPerformanceCounter(&value);
return KSCONVERT_PERFORMANCE_TIME(frequency, value);
}();
static auto start = [This, &ticks]() {
IDirect3DSurface9* renderTarget;
IDirect3DDevice9_GetRenderTarget(This, 0, &renderTarget);
IDirect3DSurface9_GetDesc(renderTarget, &desc);
IDirect3DSurface9_Release(renderTarget);
// quick hack, first 'ticks - start' is 1.
return ticks++;
}();
fps = static_cast<unsigned>(static_cast<ULONGLONG>(++count) * NANOSECONDS / (ticks - start));
FramePtr frame = Frame;
if (frame) {
IDirect3DSurface9* offsecreen;
check(TEXT("CreateOffscreenPlainSurface"), IDirect3DDevice9_CreateOffscreenPlainSurface(This, desc.Width, desc.Height, desc.Format, D3DPOOL_SYSTEMMEM, &offsecreen, nullptr));
{
IDirect3DSurface9* target;
check(TEXT("GetRenderTarget"), IDirect3DDevice9_GetRenderTarget(This, 0, &target));
#if 0
if (desc.MultiSampleType != D3DMULTISAMPLE_NONE) {
IDirect3DSurface9* resolved;
check(TEXT("CreateRenderTarget"), IDirect3DDevice9_CreateRenderTarget(This, desc.Width, desc.Height, desc.Format, D3DMULTISAMPLE_NONE, 0, false, &resolved, nullptr));
check(TEXT("StretchRect"), IDirect3DDevice9_StretchRect(This, target, nullptr, resolved, nullptr, D3DTEXF_NONE));
IDirect3DSurface9_Release(target);
target = resolved;
}
#endif
check(TEXT("GetRenderTargetData"), IDirect3DDevice9_GetRenderTargetData(This, target, offsecreen));
IDirect3DSurface9_Release(target);
}
frame(ticks, offsecreen);
IDirect3DSurface9_Release(offsecreen);
}
return IDirect3DDevice9_EndScene_Orig(This);
}
开发者ID:sayurin,项目名称:KanHQ,代码行数:42,代码来源:d3d9.cpp
示例12: video_device_release_dx9
void video_device_release_dx9(video_canvas_t *canvas)
{
if (canvas->d3dsurface) {
IDirect3DSurface9_Release(canvas->d3dsurface);
canvas->d3dsurface = NULL;
}
if (canvas->d3ddev) {
IDirect3DDevice9_Release(canvas->d3ddev);
canvas->d3ddev = NULL;
}
}
开发者ID:lakizoli,项目名称:vice-2.4-android,代码行数:11,代码来源:video-dx9.c
示例13: dxva2_release_img
static void dxva2_release_img(void *arg)
{
struct dxva2_surface *surface = arg;
if (surface->surface)
IDirect3DSurface9_Release(surface->surface);
if (surface->decoder)
IDirectXVideoDecoder_Release(surface->decoder);
talloc_free(surface);
}
开发者ID:wang-bin,项目名称:mpv,代码行数:11,代码来源:hw_dxva2.c
示例14: hb_dx_destroy_video_decoder
static void hb_dx_destroy_video_decoder( hb_va_dxva2_t *dxva2 )
{
if( dxva2->decoder )
IDirectXVideoDecoder_Release( dxva2->decoder );
dxva2->decoder = NULL;
unsigned i;
for( i = 0; i<dxva2->surface_count; i++ )
IDirect3DSurface9_Release( dxva2->surface[i].d3d );
dxva2->surface_count = 0;
}
开发者ID:DarthGoon,项目名称:HandBrake,代码行数:11,代码来源:vadxva2.c
示例15: test_surface_get_container
static void test_surface_get_container(IDirect3DDevice9 *device_ptr)
{
IDirect3DTexture9 *texture_ptr = 0;
IDirect3DSurface9 *surface_ptr = 0;
void *container_ptr;
HRESULT hr;
hr = IDirect3DDevice9_CreateTexture(device_ptr, 128, 128, 1, 0,
D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture_ptr, 0);
ok(SUCCEEDED(hr) && texture_ptr != NULL, "CreateTexture returned: hr %#lx, texture_ptr %p. "
"Expected hr %#lx, texture_ptr != %p\n", hr, texture_ptr, D3D_OK, NULL);
if (!texture_ptr || FAILED(hr)) goto cleanup;
hr = IDirect3DTexture9_GetSurfaceLevel(texture_ptr, 0, &surface_ptr);
ok(SUCCEEDED(hr) && surface_ptr != NULL, "GetSurfaceLevel returned: hr %#lx, surface_ptr %p. "
"Expected hr %#lx, surface_ptr != %p\n", hr, surface_ptr, D3D_OK, NULL);
if (!surface_ptr || FAILED(hr)) goto cleanup;
/* These should work... */
container_ptr = (void *)0x1337c0d3;
hr = IDirect3DSurface9_GetContainer(surface_ptr, &IID_IUnknown, &container_ptr);
ok(SUCCEEDED(hr) && container_ptr == texture_ptr, "GetContainer returned: hr %#lx, container_ptr %p. "
"Expected hr %#lx, container_ptr %p\n", hr, container_ptr, S_OK, texture_ptr);
if (container_ptr && container_ptr != (void *)0x1337c0d3) IUnknown_Release((IUnknown *)container_ptr);
container_ptr = (void *)0x1337c0d3;
hr = IDirect3DSurface9_GetContainer(surface_ptr, &IID_IDirect3DResource9, &container_ptr);
ok(SUCCEEDED(hr) && container_ptr == texture_ptr, "GetContainer returned: hr %#lx, container_ptr %p. "
"Expected hr %#lx, container_ptr %p\n", hr, container_ptr, S_OK, texture_ptr);
if (container_ptr && container_ptr != (void *)0x1337c0d3) IUnknown_Release((IUnknown *)container_ptr);
container_ptr = (void *)0x1337c0d3;
hr = IDirect3DSurface9_GetContainer(surface_ptr, &IID_IDirect3DBaseTexture9, &container_ptr);
ok(SUCCEEDED(hr) && container_ptr == texture_ptr, "GetContainer returned: hr %#lx, container_ptr %p. "
"Expected hr %#lx, container_ptr %p\n", hr, container_ptr, S_OK, texture_ptr);
if (container_ptr && container_ptr != (void *)0x1337c0d3) IUnknown_Release((IUnknown *)container_ptr);
container_ptr = (void *)0x1337c0d3;
hr = IDirect3DSurface9_GetContainer(surface_ptr, &IID_IDirect3DTexture9, &container_ptr);
ok(SUCCEEDED(hr) && container_ptr == texture_ptr, "GetContainer returned: hr %#lx, container_ptr %p. "
"Expected hr %#lx, container_ptr %p\n", hr, container_ptr, S_OK, texture_ptr);
if (container_ptr && container_ptr != (void *)0x1337c0d3) IUnknown_Release((IUnknown *)container_ptr);
/* ...and this one shouldn't. This should return E_NOINTERFACE and set container_ptr to NULL */
container_ptr = (void *)0x1337c0d3;
hr = IDirect3DSurface9_GetContainer(surface_ptr, &IID_IDirect3DSurface9, &container_ptr);
ok(hr == E_NOINTERFACE && container_ptr == NULL, "GetContainer returned: hr %#lx, container_ptr %p. "
"Expected hr %#lx, container_ptr %p\n", hr, container_ptr, E_NOINTERFACE, NULL);
if (container_ptr && container_ptr != (void *)0x1337c0d3) IUnknown_Release((IUnknown *)container_ptr);
cleanup:
if (texture_ptr) IDirect3DTexture9_Release(texture_ptr);
if (surface_ptr) IDirect3DSurface9_Release(surface_ptr);
}
开发者ID:howard5888,项目名称:wineT,代码行数:54,代码来源:surface.c
示例16: DxDestroyVideoDecoder
static void DxDestroyVideoDecoder(vlc_va_t *va)
{
directx_sys_t *dx_sys = &va->sys->dx_sys;
if (dx_sys->decoder)
{
IDirectXVideoDecoder_Release(dx_sys->decoder);
dx_sys->decoder = NULL;
for (unsigned i = 0; i < dx_sys->va_pool.surface_count; i++)
IDirect3DSurface9_Release(dx_sys->hw_surface[i]);
}
}
开发者ID:tguillem,项目名称:vlc,代码行数:11,代码来源:dxva2.c
示例17: test_cube_texture_levels
static void test_cube_texture_levels(IDirect3DDevice9 *device_ptr)
{
IDirect3DCubeTexture9 *texture_ptr;
DWORD levels;
D3DSURFACE_DESC desc;
HRESULT hr;
IDirect3DSurface9 *surface;
hr = IDirect3DDevice9_CreateCubeTexture(device_ptr, 64, 0, 0, D3DFMT_X8R8G8B8,
D3DPOOL_DEFAULT, &texture_ptr, NULL);
if (FAILED(hr))
{
skip("Couldn't create cube texture\n");
return;
}
levels = IDirect3DCubeTexture9_GetLevelCount(texture_ptr);
ok(levels == 7, "Got %u levels, expected 7\n", levels);
hr = IDirect3DCubeTexture9_GetLevelDesc(texture_ptr, levels - 1, &desc);
ok(hr == D3D_OK, "IDirect3DCubeTexture9_GetLevelDesc returned %#x\n", hr);
hr = IDirect3DCubeTexture9_GetLevelDesc(texture_ptr, levels, &desc);
ok(hr == D3DERR_INVALIDCALL, "IDirect3DCubeTexture9_GetLevelDesc returned %#x\n", hr);
hr = IDirect3DCubeTexture9_GetLevelDesc(texture_ptr, levels + 1, &desc);
ok(hr == D3DERR_INVALIDCALL, "IDirect3DCubeTexture9_GetLevelDesc returned %#x\n", hr);
hr = IDirect3DCubeTexture9_GetCubeMapSurface(texture_ptr, D3DCUBEMAP_FACE_POSITIVE_X,
0, &surface);
ok(hr == D3D_OK, "IDirect3DCubeTexture9_GetCubeMapSurface returned %#x\n", hr);
if (SUCCEEDED(hr)) IDirect3DSurface9_Release(surface);
hr = IDirect3DCubeTexture9_GetCubeMapSurface(texture_ptr, D3DCUBEMAP_FACE_NEGATIVE_Z + 1,
0, &surface);
ok(hr == D3DERR_INVALIDCALL, "IDirect3DCubeTexture9_GetCubeMapSurface returned %#x\n", hr);
if (SUCCEEDED(hr)) IDirect3DSurface9_Release(surface);
hr = IDirect3DCubeTexture9_GetCubeMapSurface(texture_ptr, D3DCUBEMAP_FACE_POSITIVE_X - 1,
0, &surface);
ok(hr == D3DERR_INVALIDCALL, "IDirect3DCubeTexture9_GetCubeMapSurface returned %#x\n", hr);
if (SUCCEEDED(hr)) IDirect3DSurface9_Release(surface);
IDirect3DCubeTexture9_Release(texture_ptr);
}
开发者ID:MortenRoenne,项目名称:wine,代码行数:41,代码来源:texture.c
示例18: gst_dx9screencapsrc_stop
static gboolean
gst_dx9screencapsrc_stop (GstBaseSrc * bsrc)
{
GstDX9ScreenCapSrc *src = GST_DX9SCREENCAPSRC (bsrc);
if (src->surface) {
IDirect3DSurface9_Release (src->surface);
src->surface = NULL;
}
return TRUE;
}
开发者ID:auni53,项目名称:gst-plugins-bad,代码行数:12,代码来源:gstdx9screencapsrc.c
示例19: device_state_restore
static void device_state_restore(IDirect3DDevice9 *device, struct device_state *state)
{
unsigned int i;
for (i = 0; i < state->num_render_targets; i++)
{
IDirect3DDevice9_SetRenderTarget(device, i, state->render_targets[i]);
if (state->render_targets[i])
IDirect3DSurface9_Release(state->render_targets[i]);
state->render_targets[i] = NULL;
}
IDirect3DDevice9_SetDepthStencilSurface(device, state->depth_stencil);
if (state->depth_stencil)
{
IDirect3DSurface9_Release(state->depth_stencil);
state->depth_stencil = NULL;
}
IDirect3DDevice9_SetViewport(device, &state->viewport);
}
开发者ID:hoangduit,项目名称:reactos,代码行数:21,代码来源:render.c
示例20: Close
static void Close(vlc_object_t *obj)
{
filter_t *filter = (filter_t *)obj;
filter_sys_t *sys = filter->p_sys;
IDirect3DSurface9_Release( sys->hw_surface );
IDirectXVideoProcessor_Release( sys->processor );
IDirect3DDevice9_Release( sys->d3ddev );
FreeLibrary( sys->hdecoder_dll );
FreeLibrary( sys->d3d9_dll );
free(sys);
}
开发者ID:IAPark,项目名称:vlc,代码行数:13,代码来源:dxva2_deinterlace.c
注:本文中的IDirect3DSurface9_Release函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论