增加首屏图片

增加首屏图片(bg.jpg)

web-mobile类型打包

//index.html脚本
<div id="myDiv_1111"style="background: url(./bg.jpg) 50% 50%/ 100% auto no-repeat ; width:100%;height:100%;position:absolute;"></div>
//游戏内脚本
var div = document.getElementById("myDiv_1111");setTimeout(function (){//销毁div,即移除其从DoM中div.parentNode.removeChild(div);},700);

wechat类型打包
修改首屏文件(first-screen.js)

const VS_LOGO = `
attribute vec4 a_Position;
attribute vec2 a_TexCoord;
varying vec2 v_TexCoord;
void main() {gl_Position = a_Position;  v_TexCoord = a_TexCoord;
}`;const FS_LOGO = `
precision mediump float;
uniform sampler2D u_Sampler;
varying vec2 v_TexCoord;
void main() {gl_FragColor = texture2D(u_Sampler, v_TexCoord);
}`;const VS_BG = `
attribute vec4 a_Position;
attribute vec2 a_TexCoord;
varying vec2 v_TexCoord;
void main() {gl_Position = a_Position;  v_TexCoord = a_TexCoord;
}`;const FS_BG = `
precision mediump float;
uniform sampler2D u_Sampler;
uniform float u_flip;
varying vec2 v_TexCoord;
void main() {vec2 texCoord = v_TexCoord;if(u_flip > 0.5) {texCoord.y = 1.0 - texCoord.y;}gl_FragColor = texture2D(u_Sampler, texCoord);
}`;const VS_PROGRESSBAR = `
precision mediump float;
attribute vec4 a_Position;
attribute float a_Progress;
varying float v_Progress;
void main() {gl_Position = a_Position;  v_Progress = a_Progress;
}`;const FS_PROGRESSBAR = `
precision mediump float;
uniform float u_CurrentProgress;
varying float v_Progress;
uniform vec4 u_ProgressBarColor;
uniform vec4 u_ProgressBackground;
void main() {gl_FragColor = v_Progress <= u_CurrentProgress ? u_ProgressBarColor : u_ProgressBackground;
}`;const options = {alpha: false,antialias: true,depth: true,stencil: true,premultipliedAlpha: false,preserveDrawingBuffer: false,powerPreference: 'default',failIfMajorPerformanceCaveat: false,
};let gl = null;
let image = null;
let slogan = null;
let bg = null;
let program = null;
let programBg = null;
let programProgress = null;
let rafHandle = null;
let logoTexture = null;
let sloganTexture = null;
let bgTexture = null;
let vertexBuffer = null;
let sloganVertexBuffer = null;
let bgVertexBuffer = null;
let vertexBufferProgress = null;
let progress = 0.0;
let progressBarColor = [61 / 255, 197 / 255, 222 / 255, 1];
let progressBackground = [100 / 255, 111 / 255, 118 / 255, 1];
let afterTick = null;
let backgroundFilp = 1.0; // set 0 to not flip
let displayRatio = 1;
let bgColor = [0, 0, 0, 1];
let useCustomBg = true;
let useLogo = false;
let useDefaultLogo = false;
let logoName = 'bg.jpg';
let bgName = 'bg.jpg';function initShaders(vshader, fshader) {return createProgram(vshader, fshader);
}function createProgram(vshader, fshader) {var vertexShader = loadShader(gl.VERTEX_SHADER, vshader);var fragmentShader = loadShader(gl.FRAGMENT_SHADER, fshader);var program = gl.createProgram();gl.attachShader(program, vertexShader);gl.attachShader(program, fragmentShader);gl.linkProgram(program);var linked = gl.getProgramParameter(program, gl.LINK_STATUS);if (!linked) {var error = gl.getProgramInfoLog(program);console.log('Failed to link program: ' + error);gl.deleteProgram(program);program = null;}gl.deleteShader(fragmentShader);gl.deleteShader(vertexShader);return program;
}function loadShader(type, source) {var shader = gl.createShader(type);gl.shaderSource(shader, source);gl.compileShader(shader);var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);if (!compiled) {var error = gl.getShaderInfoLog(shader);console.log('Failed to compile shader: ' + error);gl.deleteShader(shader);return null;}return shader;
}function initVertexBuffer() {const widthRatio = 2 / canvas.width;const heightRatio = 2 / canvas.height;const heightOffset = 0.225;const vertices = new Float32Array([widthRatio, heightRatio + heightOffset, 1.0, 1.0,widthRatio, heightRatio + heightOffset, 1.0, 0.0,-widthRatio, heightRatio + heightOffset, 0.0, 1.0,-widthRatio, heightRatio + heightOffset, 0.0, 0.0,]);vertexBuffer = gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
}function initSloganVertexBuffer() {const widthRatio = 2 / canvas.width;const heightRatio = 2 / canvas.height;const vertices = new Float32Array([widthRatio, heightRatio, 1.0, 1.0,widthRatio, heightRatio, 1.0, 0.0,-widthRatio, heightRatio, 0.0, 1.0,-widthRatio, heightRatio, 0.0, 0.0,]);sloganVertexBuffer = gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER, sloganVertexBuffer);gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
}function initBgVertexBuffer() {const vertices = new Float32Array([1.0, 1.0, 1.0, 1.0,1.0, 0.0, 1.0, 0.0,0.0, 1.0, 0.0, 1.0,0.0, 0.0, 0.0, 0.0,]);bgVertexBuffer = gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER, bgVertexBuffer);gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
}function initProgressVertexBuffer() {// the ratio value may be adjusted according to the image pixelsconst widthRatio = 0.5;const heightRatio = (window.devicePixelRatio >= 2 ? 6 : 3) / canvas.height * 1.35;const heightOffset = -0.8;const vertices = new Float32Array([widthRatio, heightOffset - heightRatio, 1,widthRatio, heightOffset + heightRatio, 1,-widthRatio, heightOffset - heightRatio, 0,-widthRatio, heightOffset + heightRatio, 0,]);vertexBufferProgress = gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER, vertexBufferProgress);gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
}function updateVertexBuffer() {// By default, maintain aspect ratio by constraining display at 200px heightconst defaultRatio = 200 / image.height;const widthRatio = image.width / canvas.width * 1.35 * defaultRatio * displayRatio;const heightRatio = image.height / canvas.height * 1.35 * defaultRatio * displayRatio;const heightOffset = 1 / 6; // canvas:(-1,1) -> (button, top); heightOffset = (5/12) * (-2) + 1 = 1/6const vertices = new Float32Array([widthRatio, heightOffset - heightRatio, 1.0, 1.0,widthRatio, heightOffset + heightRatio, 1.0, 0.0,-widthRatio, heightOffset - heightRatio, 0.0, 1.0,-widthRatio, heightOffset + heightRatio, 0.0, 0.0,]);gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
}function updateSloganVertexBuffer() {// the ratio value may be adjusted according to the image pixelsconst widthRatio = slogan.width / canvas.width * 0.75;const heightRatio = slogan.height / canvas.height * 0.75;const logoHeightRatio = image.height / canvas.height * 1.35 * displayRatio;const heightOffset = (5 / 12 + logoHeightRatio * 1 / 2 + heightRatio * 3 / 2) * (-2) + 1; // 5/12 is ui design layout for logoconst vertices = new Float32Array([widthRatio, heightOffset - heightRatio, 1.0, 1.0,widthRatio, heightOffset + heightRatio, 1.0, 0.0,-widthRatio, heightOffset - heightRatio, 0.0, 1.0,-widthRatio, heightOffset + heightRatio, 0.0, 0.0,]);gl.bindBuffer(gl.ARRAY_BUFFER, sloganVertexBuffer);gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
}function updateBgVertexBuffer() {const vertices = new Float32Array([1.0, 1.0, 1.0, 1.0,1.0, -1.0, 1.0, 0.0,-1.0, 1.0, 0.0, 1.0,-1.0, -1.0, 0.0, 0.0,]);gl.bindBuffer(gl.ARRAY_BUFFER, bgVertexBuffer);gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
}function loadBackground(bgPath) {return new Promise((resolve, reject) => {bg = new Image();bg.premultiplyAlpha = false;bg.onload = function () {resolve(bg);};bg.onerror = function (err) {reject(err);};bg.src = bgPath.replace('#', '%23');});
}function loadImage(imgPath) {return new Promise((resolve, reject) => {image = new Image();image.premultiplyAlpha = false;image.onload = function () {resolve(image);};image.onerror = function (err) {reject(err);};image.src = imgPath.replace('#', '%23');});
}function loadSlogan(sloganPath) {return new Promise((resolve, reject) => {slogan = new Image();slogan.premultiplyAlpha = false;slogan.onload = function () {resolve(slogan);};slogan.onerror = function (err) {reject(err);};slogan.src = sloganPath.replace('#', '%23');});
}function initLogoTexture() {logoTexture = gl.createTexture();gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D, logoTexture);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 2, 2, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255]));
}function initSloganTexture() {sloganTexture = gl.createTexture();gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D, sloganTexture);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 2, 2, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255]));
}function initBgTexture() {bgTexture = gl.createTexture();gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D, bgTexture);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 2, 2, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255]));
}function updateLogoTexture() {gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D, logoTexture);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
}function updateSloganTexture() {gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D, sloganTexture);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, slogan);
}function updateBgTexture() {gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D, bgTexture);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, bg);
}function drawTexture(gl, program, texture, vertexBuffer, vertexFormatLength) {gl.useProgram(program);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D, texture);var uSampler = gl.getUniformLocation(program, 'u_Sampler');gl.uniform1i(uSampler, 0);var uFlip = gl.getUniformLocation(program, 'u_flip');gl.uniform1f(uFlip, backgroundFilp);gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);var aPosition = gl.getAttribLocation(program, 'a_Position');gl.enableVertexAttribArray(aPosition);gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, vertexFormatLength * 4, 0);var aTexCoord = gl.getAttribLocation(program, 'a_TexCoord');gl.enableVertexAttribArray(aTexCoord);gl.vertexAttribPointer(aTexCoord, 2, gl.FLOAT, false, vertexFormatLength * 4, vertexFormatLength * 2);gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
}function drawProgressBar(gl, program, vertexBuffer, vertexFormatLength, progress, progressBarColor, progressBackground) {gl.useProgram(program);var uCurrentProgress = gl.getUniformLocation(program, 'u_CurrentProgress');gl.uniform1f(uCurrentProgress, progress);var uProgressBarColor = gl.getUniformLocation(program, 'u_ProgressBarColor');gl.uniform4fv(uProgressBarColor, progressBarColor);var uProgressBackground = gl.getUniformLocation(program, 'u_ProgressBackground');gl.uniform4fv(uProgressBackground, progressBackground);gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);var aPosition = gl.getAttribLocation(program, 'a_Position');gl.enableVertexAttribArray(aPosition);var vertexFormatLength = 4;gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, vertexFormatLength * 3, 0);var aProgress = gl.getAttribLocation(program, 'a_Progress');gl.enableVertexAttribArray(aProgress);gl.vertexAttribPointer(aProgress, 1, gl.FLOAT, false, vertexFormatLength * 3, vertexFormatLength * 2);gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
}function draw() {gl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);gl.clearColor(bgColor[0], bgColor[1], bgColor[2], bgColor[3]);gl.clear(gl.COLOR_BUFFER_BIT);// draw backgrounduseCustomBg && drawTexture(gl, programBg, bgTexture, bgVertexBuffer, 4);// draw logouseLogo && drawTexture(gl, program, logoTexture, vertexBuffer, 4);// draw sloganuseLogo && useDefaultLogo && drawTexture(gl, program, sloganTexture, sloganVertexBuffer, 4);// draw progress bardrawProgressBar(gl, programProgress, vertexBufferProgress, 3, progress, progressBarColor, progressBackground);
}function tick() {rafHandle = requestAnimationFrame(() => {draw();tick();if (afterTick) {afterTick();afterTick = null;}});
}function end() {return setProgress(1).then(() => {cancelAnimationFrame(rafHandle);gl.useProgram(null);gl.bindTexture(gl.TEXTURE_2D, null);gl.bindBuffer(gl.ARRAY_BUFFER, null);useLogo && gl.deleteTexture(logoTexture);useLogo && useDefaultLogo && gl.deleteTexture(sloganTexture);useCustomBg && gl.deleteTexture(bgTexture);gl.deleteBuffer(vertexBuffer);useCustomBg && gl.deleteBuffer(bgVertexBuffer);useLogo && useDefaultLogo && gl.deleteBuffer(sloganVertexBuffer);gl.deleteBuffer(vertexBufferProgress);gl.deleteProgram(program);gl.deleteProgram(programBg);gl.deleteProgram(programProgress);});
}function setProgress(val) {progress = val;return new Promise((resolve, reject) => {afterTick = () => {resolve();};});
}function start(alpha, antialias, useWebgl2) {options.alpha = alpha === 'true' ? true : false;options.antialias = antialias === 'false' ? false : true;if (useWebgl2 === 'true') {gl = window.canvas.getContext("webgl2", options);}// TODO: this is a hack method to detect whether WebGL2RenderingContext is supportedif (gl) {window.WebGL2RenderingContext = true;} else {window.WebGL2RenderingContext = false;gl = window.canvas.getContext("webgl", options);}initVertexBuffer();useCustomBg && initBgVertexBuffer();useLogo && useDefaultLogo && initSloganVertexBuffer();initProgressVertexBuffer();initLogoTexture();useCustomBg && initBgTexture();useLogo && useDefaultLogo && initSloganTexture();if (useLogo) {program = initShaders(VS_LOGO, FS_LOGO);}if (useCustomBg) {programBg = initShaders(VS_BG, FS_BG);}programProgress = initShaders(VS_PROGRESSBAR, FS_PROGRESSBAR);tick();return Promise.all([//logo should be loaded earlier than sloganuseLogo && loadImage(logoName).then(() => {updateVertexBuffer();updateLogoTexture();}).then(() => {return useLogo && useDefaultLogo && loadSlogan('slogan.png').then(() => {updateSloganVertexBuffer();updateSloganTexture();});}),useCustomBg && loadBackground(bgName).then(() => {updateBgVertexBuffer();updateBgTexture();})]).then(() => {return setProgress(0);});
}
module.exports = { start, end, setProgress };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法~~

目录 一、理论基础 二、题目练习 &#xff08;1&#xff09;455. 分发饼干 &#xff08;2&#xff09;53. 最大子数组和 - 力扣 &#xff08;3&#xff09;122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; &#xff08;4&#xff09;860. 柠檬水找零…

形象解释 HTTP 的四种常见请求方式及其中的区别联系

HTTP 的常见请求方式常见的有四种&#xff1a;GET、POST、PUT、DELETE&#xff0c;它们各自的功能不一样。 &#x1f35c; 场景比喻&#xff1a;HTTP 请求像“去餐厅点菜” 请求方式行为餐厅比喻说明GET获取数据看菜单/问服务员&#xff1a;你们有什么菜&#xff1f;不带食材、…

string的基本使用

string的模拟实现 string的基本用法string的遍历&#xff08;三种方式&#xff09;&#xff1a;关于auto&#xff08;自动推导&#xff09;:范围for: 迭代器普通迭代器(可读可改&#xff09;const迭代器&#xff08;可读不可改&#xff09; string细小知识点string的常见接口引…

kubernetes》》k8s》》证书有效期

cd /etc/kubernetes/pki openssl x509 -in apiserver.crt -text -noount通常&#xff0c;Kubernetes的证书是由kubeadm生成的&#xff0c;所以可能需要修改kubeadm的源码或者配置 登录Master节点 》》》默认延续1年 # 查看证书 检查证书有效期 # 该命令显示 /etc/kubernetes…

LangChain LCEL表达式语言简介

LangChain表达式语言&#xff08;LCEL&#xff09;是专为构建AI应用链设计的声明式编程框架&#xff0c;通过管道符|实现组件无缝衔接&#xff0c;支持流式处理、异步调用等生产级特性。其核心优势在于零代码改动实现原型到生产的过渡&#xff0c;同时保持代码简洁性和可维护性…

【计算机视觉】CV实践项目- 基于PaddleSeg的遥感建筑变化检测全解析:从U-Net 3+原理到工程实践

基于PaddleSeg的遥感建筑变化检测全解析&#xff1a;从U-Net 3原理到工程实践 技术背景与项目意义传统方法的局限性深度学习的优势 核心技术与算法原理U-Net 3架构创新全尺度跳跃连接深度监督机制 变化检测技术路线 实战指南&#xff1a;从环境搭建到模型部署环境配置数据准备与…

万字长文 | Apache SeaTunnel 分离集群模式部署 K8s 集群实践

文章作者&#xff1a;雷宝鑫 整理排版&#xff1a;白鲸开源 曾辉 Apache SeaTunnel官网链接: https://seatunnel.apache.org/ Apache SeaTunnel(以下简称SeaTunnel&#xff09;是一款新一代高性能、分布式的数据集成同步工具&#xff0c;正受到业界广泛关注和应用。SeaTunnel支…

深入解析YOLO v1:实时目标检测的开山之作

目录 YOLO v1 算法详解​ ​1. 核心思想​ ​2. 算法优势​ ​3. 网络结构&#xff08;Unified Detection&#xff09;​​ ​4. 关键创新​ ​5. 结构示意图&#xff08;Fig1&#xff09;​ Confidence Score 的计算​ 类别概率与 Bounding Box 的关系​ 后处理&…

信令与流程分析

WebRTC是h5支持的重要特征之一&#xff0c;有了它&#xff0c;不再需要借助音视频相关的客户端&#xff0c;直接通过浏览器的Web页面就可以实现音视频聊天功能。 WebRTC项目是开源的&#xff0c;我们可以借助WebRTC&#xff0c;构建自己的音视频聊缇娜功能。无论是前端JS的Web…

BIOS主板(非UEFI)安装fedora42的方法

BIOS主板(非UEFI)安装fedora42的方法 现实困难&#xff1a;将Fedora-Workstation-Live-42-1.1.x86_64.iso写入U盘制作成可启动U盘启动fedora42&#xff0c;按照向导将fedora42安装到真机的sda7分区中得到报错如下内容&#xff1a; /boot/efi 必需的 /boot/efi必须位于格式化为e…

安卓 Compose 相对传统 View 的优势

安卓 Compose 相对传统 View 的优势 文章目录 安卓 Compose 相对传统 View 的优势1. 引言2. 核心概念&#xff1a;Compose的革新性设计2.1 Jetpack Compose2.2 传统安卓View系统 3. 开发体验&#xff1a;Compose大幅提升效率3.1 使用Jetpack Compose构建UI3.2 使用传统View系统…

SIEMENS PLC 程序 GRAPH 程序解读 车型入库

1、程序载图1 2、程序截图2 3、程序解释 这是一个基于西门子 GRAPH 编程的车型 1 入库顺序控制流程图&#xff0c;通过状态机结构&#xff08;状态框 S 与转移条件 T&#xff09;描述完整工作流程&#xff0c;具体如下&#xff1a; 整体流程概述 初始化&#xff1a;从 S1&am…

VuePress可以做什么?

VuePress 可以做什么 VuePress 是一个基于 Vue.js 的静态站点生成器,专注于文档和内容展示。它结合了 Markdown 的简洁性和 Vue 的灵活性,适合多种场景的开发需求。以下是 VuePress 的主要用途和功能: 1. 技术文档网站 VuePress 最初是为编写 Vue.js 官方文档而设计的,因…

架构-系统可靠性分析与设计

一、可靠性相关基本概念 1. 可靠性与可用性 可靠性&#xff1a;软件系统在遇到错误、意外操作或系统故障时&#xff0c;仍能维持自身功能特性的能力。 举例&#xff1a;手机银行APP在用户误操作&#xff08;如快速点击多次转账&#xff09;时&#xff0c;仍能正确处理交易并避…

再谈String

1、字符串常量池 1.1 创建对象的思考 下面是两种创建字符串对象的代码 public static void main1(String[] args) {String s1 "hello";String s2 "hello";System.out.println(s1 s2);//trueString s3 new String("hello");String s4 new …

《深入浅出ProtoBuf:从环境搭建到高效数据序列化》​

ProtoBuf详解 1、初识ProtoBuf2、安装ProtoBuf2.1、ProtoBuf在Windows下的安装2.2、ProtoBuf在Linux下的安装 3、快速上手——通讯录V1.03.1、步骤1&#xff1a;创建.proto文件3.2、步骤2&#xff1a;编译contacts.proto文件&#xff0c;生成C文件3.3、步骤3&#xff1a;序列化…

基于PHP+Uniapp的互联网医院源码:电子处方功能落地方案

随着“互联网医疗”政策红利持续释放&#xff0c;互联网医院已成为推动医疗数字化转型的重要方向。在这一趋势下&#xff0c;电子处方功能模块作为核心环节&#xff0c;不仅直接关系到线上问诊闭环的实现&#xff0c;也成为系统开发中技术难度较高、业务逻辑最为复杂的一部分。…

ARM Cortex-M (STM32)如何调试HardFault

目录 步骤 1: 实现一个有效的 HardFault 处理程序 步骤 2: 复现 HardFault 并使用调试器分析 步骤 3: 解读故障信息 步骤 4: 定位并修复源代码 HardFault 是 ARM Cortex-M 处理器中的一种异常。当处理器遇到无法处理的错误&#xff0c;或者配置为处理特定类型错误&#xff…

基于归纳共形预测的大型视觉-语言模型中预测集的**数据驱动校准**

摘要 本研究通过分离共形预测&#xff08;SCP&#xff09;框架&#xff0c;解决了大型视觉语言模型&#xff08;LVLMs&#xff09;在视觉问答&#xff08;VQA&#xff09;任务中幻觉缓解的关键挑战。虽然LVLMs在多模态推理方面表现出色&#xff0c;但它们的输出常常表现出具有…

LangChain4j 搭配 Kotlin:以协程、流式交互赋能语言模型开发

Kotlin 支持 | LangChain4j Kotlin 是一种面向 JVM&#xff08;及其他平台&#xff09;的静态类型语言&#xff0c;能够实现简洁优雅的代码&#xff0c;并与 Java 库无缝互操作。 LangChain4j 利用 Kotlin 扩展和类型安全构建器来增强 Java API&#xff0c;为其增添特定于 Ko…